Как я могу создать необязательный необязательный числовой (целочисленный / двойной) параметр в VB.NET? - PullRequest
4 голосов
/ 18 января 2010

Как создать необязательный числовой необязательный параметр в VB.NET ?

Ответы [ 4 ]

15 голосов
/ 18 января 2010

РЕДАКТИРОВАТЬ: это должно быть возможно в VB.NET 10 в соответствии с этого сообщения в блоге . Если вы используете его, то вы можете иметь:

Public Sub DoSomething(Optional ByVal someInteger As Integer? = Nothing)
    Console.WriteLine("Result: {0} - {1}", someInteger.HasValue, someInteger)
End Sub

' use it
DoSomething(Nothing)
DoSomething(20)

Для версий, отличных от VB.NET 10:

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

Public Sub DoSomething(Optional ByVal someInteger As Nullable(Of Integer) _
                        = Nothing)

Вы получите эту ошибку компиляции: «Необязательные параметры не могут иметь типы структуры.»

Если вы используете nullable, установите для него значение Nothing, если вы не хотите передавать ему значение. Выберите один из следующих вариантов:

Public Sub DoSomething(ByVal someInteger As Nullable(Of Integer))
    Console.WriteLine("Result: {0} - {1}", someInteger.HasValue, someInteger)
End Sub

или

Public Sub DoSomething(Optional ByVal someInteger As Integer = 42)
    Console.WriteLine("Result: {0}", someInteger)
End Sub
5 голосов
/ 18 января 2010

Вы не можете, поэтому вместо этого вам придется обходиться перегрузкой:

Public Sub Method()
  Method(Nothing) ' or Method(45), depending on what you wanted default to be
End Sub

Public Sub Method(value as Nullable(Of Integer))
  ' Do stuff...
End Sub
2 голосов
/ 07 октября 2011

Вы также можете использовать объект:

Public Sub DoSomething(Optional ByVal someInteger As Object = Nothing)
If someInteger IsNot Nothing Then
  ... Convert.ToInt32(someInteger)
End If

End Sub

0 голосов
/ 29 ноября 2014

Я понял это в версии VS2012, как

Private _LodgingItemId As Integer?

Public Property LodgingItemId() As Integer?
        Get
            Return _LodgingItemId
        End Get
        Set(ByVal Value As Integer?)
            _LodgingItemId = Value
        End Set
    End Property

Public Sub New(ByVal lodgingItem As LodgingItem, user As String)
        Me._LodgingItem = lodgingItem
        If (lodgingItem.LodgingItemId.HasValue) Then
            LoadLodgingItemStatus(lodgingItem.LodgingItemId)
        Else
            LoadLodgingItemStatus()
        End If
        Me._UpdatedBy = user
    End Sub

Private Sub LoadLodgingItemStatus(Optional ByVal lodgingItemId As Integer? = Nothing)
    ''''statement 
End Sub
...