2010-08-27 2 views
2

у меня есть:VB.NET - хотите добавить два типа с нулевым значением - как? (То есть var1 + var2, где оба обнуляемые и vari1 = Ничего, Переменная2 = 5 результатов в настоящее время)

Dim nVar1 As Long? 

Dim nVar2 As Long? 

Dim nVarSum As Long? 

nVar1 = Nothing 

nVar2 = 5 

nVarSum = nVar1 + nVar2 

я предпочел бы результат, чтобы закончить с nVarSum быть 5, а не Ничто.

Я понимаю, что если вы добавите что-то к неизвестному значению, вы получите «somthing + unknown» или x + 5 всегда будет равным «x + 5», а не «5», потому что вы все еще несете это неизвестное "Икс".

Однако, как я могу эффективно рассматривать неизвестное или Nothing как ноль для целей добавления в этом случае?

Спасибо!

(Что в основном происходит, так это то, что конечный пользователь отправляет нам файл данных, этот код анализирует этот файл, а затем суммирует около 15 полей. Если пользователь оставляет эти поля пустым, а не назначает нуль им, я нужно обрабатывать его, как если бы он был нулевым для этой операции сложения, но весь остальной код должен продолжать рассматривать его как значение «Ничего», так как пользователь не подавал нуль ... они отправили пустое или ничего)

+0

Другой причиной использования C# 'nVarSum = (nVar1 ?? 0) + nVar2' –

+1

@Binary, синтаксис VB просто лаконичность здесь. 'nVarSum = If (nVar1,0) + nVar2' – JaredPar

+0

++ действительно! (Обслуживание проекта, иначе я бы сделал это в C#) – Maxer

ответ

3

Я думаю, что самым простым способом является использование оператора If для принудительного использования значений Nothing в значение по умолчанию.

nVarSum = If(nVar1,0) + If(nVar2,0) 

If оператор в виде 2 аргумента, когда применяются к обнуляемым типам по существу делает следующее. Если значение nullable имеет значение, тогда возвращаемое значение является значением, в противном случае это второй аргумент.

+0

Ненавижу, когда языки добавляют неоднозначные операторы. – ChaosPandion

+0

@Chaos, как это двусмысленно? Это эквивалент VB оператора нулевого коллайзера C#. – JaredPar

+0

@JaredPar - 'If (Boolean, TrueValue, FalseValue)'? – ChaosPandion

5
nVar1.GetValueOrDefault()+ nVar2.GetValueOrDefault() 

Или в C#:

(nVar1??0)+(nVar2??0) 
0

Или явно проверить ничего и установить значение по умолчанию. Тот же результат, что и другие ответы.

If nVar1 is nothing then 
    nVar1 = 0 
end if 

nVarSum = nVar1 + nVar2 
+0

Я думаю, что мне придется использовать оператор If, потому что я не могу изменить фактическое значение nVar1 (я добавил редактирование после объяснения контекста).То, что ничего не нужно сохранить для использования позже в коде и т. Д. В противном случае я полностью согласен с установкой его на ноль и с его выполнением. – Maxer