Это странность VB.NET.Nothing
означает не только null
(C #) , но также default
(C #) .Таким образом, он вернет значение по умолчанию для данного типа.По этой причине вы даже можете присвоить Nothing
переменной Integer
(или любому другому типу ссылки или значения).
В этом случае компилятор решил, что Nothing
означает значение по умолчанию Integer
, которое равно 0. Почему?Потому что ему нужно найти неявное преобразование в Id
-свойство, которое равно Int32
.
Если вы хотите Nullable(Of Int32)
, используйте:
Return Query(if(CustomClass IsNot Nothing, CustomClass.Id, New Int32?()))
Поскольку я упомянул C #, если вы попробуете то же самое там, вы получите ошибку компилятора, что не существует неявного преобразования между null
и int
.В VB.NET есть один, значение по умолчанию 0.