См. документацию для параметров Optional
, почему это не сработает:
Каждый необязательный параметр в определении процедуры должен указывать значение по умолчанию.
Значением по умолчанию для необязательного параметра должно быть константное выражение .
Каждый параметр, следующий за необязательным параметром в определении процедуры, также должен быть необязательным.
Следовательно, вам нужно что-то вроде этого, чтобы работать так, как вы задумывали:
Function func(ByVal param1 As String, ByVal param2 As String, ByVal Optional param3 As String = "") As String
If(String.IsNullOrEmpty(param3) Then
param3 = param1
End If
Return ""
End Function
Однако вы можете решить эту проблему с помощью перегрузки вместо Optional
:
Function func(ByVal param1 As String, ByVal param2 As String) As String
Return func(param1, param2, param1)
End Function
Function func(ByVal param1 As String, ByVal param2 As String, ByVal param3 as String) As String
Return ""
End Function
Вероятно, не самая ясная реализация, поэтому, если вы сделаете это, убедитесь, что добавили XML-комментарии к методу, чтобы его было легко понять.