Используя VB.NET IIF, я получаю исключение NullReferenceException - PullRequest
41 голосов
/ 09 января 2009

Я делаю небольшую отладку, и поэтому я хочу записать значение eventArgs

У меня есть простая строка, которая в основном делает:

logLine = "e.Value: " + IIf(e.Value Is Nothing, "", e.Value.ToString())

Как я понимаю функцию IIF, если значение e.Value равно Nothing (null), то оно должно возвращать пустую строку, если нет - возвращать .ToString значения Я, однако, получаю исключение NullReferenceException. Это не имеет смысла для меня.

Есть идеи?

Ответы [ 3 ]

75 голосов
/ 09 января 2009

IIf - фактическая функция, поэтому все аргументы оцениваются. Ключевое слово If было добавлено в VB.NET 2008 для обеспечения ожидаемой функциональности короткого замыкания.

Попробуйте

logLine = "e.Value: " + If(e.Value Is Nothing, "", e.Value.ToString())
3 голосов
/ 09 января 2009

Это ожидаемое поведение.

IIF - это функция; поэтому параметры функции будут оцениваться перед отправкой в ​​функцию.

Напротив, троичный оператор в C # является языковой конструкцией, которая предотвращает вычисление второго параметра, если выражение троичного является истинным.

3 голосов
/ 09 января 2009

VB не выполняет оценку короткого замыкания в Iif. В вашем случае e.Value.ToString () оценивается независимо от того, является ли e.Value ничем.

...