可选参数需要默认值,但我似乎无法将默认数组分配给可选数组参数。例如:
Optional ByVal myArray As Long() = Nothing ' This works
然而
Optional ByVal myArray As Long() = New Long() {0, 1} ' This isn't accepted.
IDE告诉我需要“常量表达式”来代替New Long() {0, 1}
。
是否有分配默认常量数组的技巧,还是不允许?
答案 0 :(得分:13)
它不是“常量表达式”,可以在编译时完全评估并生成可以存储在程序集元数据中的单个简单值的表达式。稍后在其他代码中使用,以进行调用。可选值在编译时检索,而不是运行时,严格地说是编译器功能。
New 运算符必须在运行时执行,并且需要代码才能执行此操作。因此,这不是一个持续的表达。简单的解决方法是使用Nothing并将代码放在方法体中:
Sub Foo(Optional ByVal myArray As Long() = Nothing)
If myArray Is Nothing Then myArray = New Long() {0, 1}
'' etc...
End Sub