VB.NET - Хотите добавить два обнуляемых типа - как? (то есть var1 + var2, где оба обнуляются и vari1 = Nothing, Var2 = 5 приводит к Nothing) - PullRequest
2 голосов
/ 27 августа 2010

У меня есть:

Dim nVar1 As Long?

Dim nVar2 As Long?

Dim nVarSum As Long?

nVar1 = Nothing

nVar2 = 5

nVarSum = nVar1 + nVar2

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

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

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

Спасибо!

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

Ответы [ 3 ]

5 голосов
/ 27 августа 2010
nVar1.GetValueOrDefault()+ nVar2.GetValueOrDefault()

Или в c #:

(nVar1??0)+(nVar2??0)
3 голосов
/ 27 августа 2010

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

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

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

0 голосов
/ 27 августа 2010

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

If nVar1 is nothing then
   nVar1 = 0
end if

nVarSum = nVar1 + nVar2
...