2013-02-20 3 views
2

Я конвертирую код 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 

работает правильно. Спасибо, Стив.

+0

Вы пробовали с 'если x.Value не IsNot ничего затем' – Steve

+2

FYI В VB,' Nothing' не лечится, как нуль, когда по сравнению с типами значений, как логическое значение, как вы 'd ожидать в C#. Вместо этого он равен значению по умолчанию этого значения, которое является 'false' для bool. – Keith

ответ

4

Использование Если x.Value Is DBNull.Value Тогда ...

4

Вы должны использовать IsNot без пробела между 'Is' и 'Not' в vb. Так что ваш код будет выглядеть следующим образом:

If x.Value IsNot Nothing Then 
    ...do Stuff... 
Else 
    ...do else stuff... 
End IF