Usando VB.NET IIF I get NullReferenceException
-
06-07-2019 - |
Pergunta
Eu estou fazendo um pouco de depuração, e por isso quero registrar o valor eventArgs
Eu tenho uma linha simples que basicamente faz:
logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString())
A forma como eu entendo a função IIF, se a E.Value é Nothing (null), em seguida, ele deve retornar a string vazia, se não ele deve retornar a .ToString do valor. Estou, no entanto recebendo um NullReferenceException. Isso não faz sentido para mim.
Qualquer de idéia?
Solução
IIf é uma função real, para que todos os argumentos obter avaliados. A Se palavra-chave foi adicionado em VB.NET 2008 para fornecer a curto funcionalidade circuito que você está esperando.
Tente
logLine = "e.Value: " + If(e.Value Is Nothing, "", e.Value.ToString())
Outras dicas
VB não faz curto-circuito avaliação no IIF. No seu caso, e.Value.ToString () está sendo avaliado, não importa se E.Value é nada.
Este é o comportamento esperado.
IIF
é uma função; portanto, os parâmetros para a função será avaliada antes de enviá-lo para a função.
Em contraste, o operador ternário em C # é uma construção de linguagem que impede a avaliação do segundo parâmetro, se a expressão do ternário é verdadeiro.