Подтвердить что ты не робот

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

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

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

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

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

Любая идея?

4b9b3361

Ответ 1

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

Try

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

Ответ 2

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

Ответ 3

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

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

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