Как я могу создать нулевый необязательный числовой (целочисленный/двойной) параметр в vb.net?

StackOverflow https://stackoverflow.com/questions/2086281

Вопрос

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

Это было полезно?

Решение

Изменить: это должно быть возможно в 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, установите его ни к чему, если вы не хотите передать ему значение. Выберите между этими параметрами:

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

Другие советы

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

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

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

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

Конец суб

Я выясняю это в версии 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top