РЕДАКТИРОВАТЬ: это должно быть возможно в 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