2010-01-18 6 views

ответ

13

EDIT: это должно быть возможным в VB.NET 10 согласно this blog post. Если вы используете его, то вы могли бы:

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 версий:

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

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 
+1

Идеальный ответ .. спасибо много .. –

5

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

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 
1

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

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

Конец Sub

0

Я полагаю, что это в 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 

 Смежные вопросы

  • Нет связанных вопросов^_^