Как я могу создать нулевый необязательный числовой (целочисленный/двойной) параметр в vb.net?
-
21-09-2019 - |
Вопрос
Как я могу создать нулевый числовой необязательный параметр в 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