Я конвертирую код C# в VB.NET. У меня есть простая, подобная словарю структура данных, содержащая пары имя/значение. Элемент value имеет тип Object. Мой C# код выглядит следующим образомТестирование, если объект Nothing/null в VB.NET vs C#
if(x.Value != null)
// 1: Store x.Value in database
else
// Sore DBNULL.Value in database
Как и следовало ожидать, если x.Value случается булевым значение ложного, кодовый блок-выше выполняется.
Однако, эквивалентный код VB.NET провалится к блоку еще на булевой ложной
If x.Value Is Not Nothing Then
' Store x.Value in database
Else
' We land here if x.Value is a Boolean with a value of False and incorrectly store DBNULL.Value in database
EndIF
VB по-видимому, считает, что логическое с ложным значением эквивалентно Nothing. Я буду оставлять свои комментарии о VB себе, но есть ли не запутанный способ, т. Е. Без использования рефлексии, обойти эту проблему?
Edit: мой исходный код VB был на самом деле
If x.Value <> Nothing
, который работал, как описано.
If x.Value IsNot Nothing
работает правильно. Спасибо, Стив.
Вы пробовали с 'если x.Value не IsNot ничего затем' – Steve
FYI В VB,' Nothing' не лечится, как нуль, когда по сравнению с типами значений, как логическое значение, как вы 'd ожидать в C#. Вместо этого он равен значению по умолчанию этого значения, которое является 'false' для bool. – Keith