如何定义一个函数,该函数将带有空数组的可选数组作为默认值?
public void DoSomething(int index, ushort[] array = new ushort[] {},
bool thirdParam = true)
结果:
'array'的默认参数值必须是编译时常量。
答案 0 :(得分:108)
您无法创建对象引用的编译时常量。
您可以使用的唯一有效编译时常量是null
,因此请将代码更改为:
public void DoSomething(int index, ushort[] array = null,
bool thirdParam = true)
在你的方法里面这样做:
array = array ?? new ushort[0];
答案 1 :(得分:19)
如果你可以将数组作为最后一个参数,你也可以这样做:
public void DoSomething(int index, bool wasThirdParam = true, params ushort[] array)
如果未指定空数组,编译器将自动传递一个空数组,并且您可以更灵活地将数组作为单个参数传递,或者将元素作为可变长度参数直接放入方法中。
答案 2 :(得分:5)
我知道这是一个老问题,虽然这个答案并没有直接解决如何解决编译器施加的限制,但方法重载是另一种选择:
public void DoSomething(int index, bool thirdParam = true){
DoSomething(index, new ushort[] {}, thirdParam);
}
public void DoSomething(int index, ushort[] array, bool thirdParam = true){
...
}