Каково нулевое значение Nullable(Of T)?

У меня есть свойство, допускающее значение NULL, и я хочу вернуть нулевое значение. Как мне это сделать в VB.NET?

В настоящее время я использую это решение, но я думаю, что может быть лучший способ.

    Public Shared ReadOnly Property rubrique_id() As Nullable(Of Integer)
        Get
            If Current.Request.QueryString("rid") <> "" Then
                Return CInt(Current.Request.QueryString("rid"))
            Else
                Return (New Nullable(Of Integer)).Value
            End If
        End Get
    End Property

person thomasb    schedule 16.09.2008    source источник


Ответы (4)


Вы ищете ключевое слово "Ничего"?

person Jon    schedule 16.09.2008
comment
Хм, на самом деле да. Я вижу, что на самом деле Nothing эквивалентно C# null, хотя я думал, что он используется только для проверки того, был ли создан экземпляр объекта. - person thomasb; 16.09.2008

Да, это Nothing в VB.NET или null в C#.

Общий тип данных Nullable дает компилятору возможность присвоить значение «Ничего» (или нулевое) типу значения. Без явного написания этого вы не можете сделать это.

Типы, допускающие значение NULL, в C#

person Luca Molteni    schedule 16.09.2008

Или это то, как я использую, честно говоря, ReSharper научил меня :)

finder.Advisor = ucEstateFinder.Advisor == "-1" ? (long?)null : long.Parse(ucEstateFinder.Advisor);

При назначении выше, если я напрямую назначу null для finder.Advisor*(long?)*, проблем не будет. Но если я попытаюсь использовать предложение if, мне нужно будет использовать его так: (long?)null.

person Barbaros Alp    schedule 13.01.2009

Хотя Nothing можно использовать, ваш "существующий" код почти правильный; просто не пытайтесь получить .Value:

Public Shared ReadOnly Property rubrique_id() As Nullable(Of Integer)
    Get
        If Current.Request.QueryString("rid") <> "" Then
            Return CInt(Current.Request.QueryString("rid"))
        Else
            Return New Nullable(Of Integer)
        End If
    End Get
End Property

Затем это становится самым простым решением, если вы хотите сократить его до выражения If:

Public Shared ReadOnly Property rubrique_id() As Nullable(Of Integer)
    Get
        Return If(Current.Request.QueryString("rid") <> "", _
            CInt(Current.Request.QueryString("rid")), _
            New Nullable(Of Integer))
    End Get
End Property
person Mark Hurd    schedule 01.02.2014