Используя VB.NET IIF, я получаю исключение NullReferenceException

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

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

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

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

Есть идеи?

3 ответа

Решение

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

Пытаться

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

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

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

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

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

Другие вопросы по тегам