Значение по умолчанию обнуляемого целого числа, различного в функции If () - PullRequest
1 голос
/ 08 декабря 2010

Я пытаюсь понять, почему два примера кода ведут себя по-разному.Я всегда верил, что функция If () имитирует функцию языка If.Или я смотрю на поведение Nullable (Of Integer), которое вызывает это?

Образец № 1:

If Not String.IsNullOrWhiteSpace(PC.SelectedValue) Then

    Dim pcFilter1 As Integer? = CInt(PC.SelectedValue)

Else

    Dim pcFilter1 As Integer? = Nothing

End If

Образец № 2:

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue),
                               CInt(PC.SelectedValue),
                               Nothing)

Результат:

pcFilter1 = Ничего

pcFilter2 = 0

1 Ответ

7 голосов
/ 08 декабря 2010

В примере №2 ваш CInt бросок вызывает проблему.Конструкция If () пытается определить общий тип для 2-го и 3-го параметров.Видя второй параметр как целое число, он затем преобразует Nothing в целое число, которое из-за магического приведения VB приводит к 0. Например,

Dim i As Integer = Nothing 'results in i being set to 0

Чтобы получить то, что вы хотите с помощью If (), попробуйте следующее:*

Dim pcFilter2 As Integer? = If(Not String.IsNullOrWhiteSpace(PC.SelectedValue),
                           New Integer?(CInt(PC.SelectedValue)),
                           Nothing)
...