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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top