O operador "If" do VB.NET causa boxe?
Aqueles de nós que trabalharam no VB / VB.NET viram código semelhante a esta abominação:
Dim name As String = IIf(obj Is Nothing, "", obj.Name)
Eu digo "abominação" por três razões simples:
IIf
é umfunção, cujos parâmetros são avaliados; portanto, seobj
não há nada na chamada acima, então umNullReferenceException
será lançado. Esse é um comportamento inesperado para alguém acostumado a operadores ternários em curto-circuito em idiomas como C #.Porque IIf
é uma função, portanto incorre na sobrecarga de uma chamada de função. Novamente, embora isso não seja grande coisa, simplesmente não parece certo para alguém que espera que ele se comporte como uma operação ternária intrínseca ao idioma.IIf
não é genérico e, portanto, aceita parâmetros do tipoObject
, o que significa que, nas caixas de chamada a seguir (acredito), um total de três números inteiros:
' boxes 2nd and 3rd arguments as well as return value '
Dim value As Integer = IIf(condition, 1, -1)
Agora, em uma versão mais recente do VB.NET (não tenho certeza qual é o número), oIf
operador foi introduzido, que funciona exatamente da mesma maneira que oIIf
funcionar mas (como eu o entendo) sem as mesmas deficiências. Ou seja, éfaz fornecer curto-circuito eé uma operação intrínseca de VB. No entanto, não tenho certeza sobre a última parte. oDocumentação do MSDN parece não indicar seIf
caixas seus argumentos ou não. Alguém sabe?