VB.NET Nullables - PullRequest
       4

VB.NET Nullables

3 голосов
/ 14 сентября 2011

Я испытываю непредсказуемые эффекты с нулями в VB.net. У рассматриваемого объекта есть свойство, определенное:

Public Property Value As Int32?

Когда я пытаюсь объединить значение, используя IIf, я получаю нулевое исключение

cmd.Parameters.AddWithValue("@HOValue", IIf(headOffice.Value.HasValue, headOffice.Value .Value, DBNull.Value))

В C # я знаю, что нет неявного преобразования для обнуляемых значений, поэтому вы не можете использовать ??, но почему первая часть IIf оценивается в VB.NET?

Ответы [ 2 ]

9 голосов
/ 14 сентября 2011

Резонанс для этого заключается в том, что Iif является функцией, поэтому и значение true, и значение false оцениваются до выполнения условия.

Вместо этого используйте If, т. Е.

 cmd.Parameters.AddWithValue("@HOValue", If(headOffice.Value.HasValue, headOffice.Value.Value, DBNull.Value)) ' Assuming you've already checked that headOffice.Value IsNot Nothing
3 голосов
/ 14 сентября 2011

Iff - это функция, т. Е. Ее аргументы оцениваются до ее выполнения. Когда headOffice.Value равно нулю, тогда headOffice.Value.Value не может быть оценено здесь.

...