传递一个空数组作为可选参数的默认值

如何定义一个函数,将一个空数组的可选数组作为默认值?

public void DoSomething(int index, ushort[] array = new ushort[] {}, bool thirdParam = true) 

结果是:

“数组”的默认参数值必须是编译时常量。

您不能创build对象引用的编译时常量。

您可以使用的唯一有效的编译时常量为null ,因此请将您的代码更改为:

 public void DoSomething(int index, ushort[] array = null, bool thirdParam = true) 

在你的方法里面这样做:

 array = array ?? new ushort[0]; 

如果你可以把数组作为最后一个参数,你也可以这样做:

 public void DoSomething(int index, bool wasThirdParam = true, params ushort[] array) 

如果没有指定,编译器会自动传递一个空数组,并且增加了将数组作为单个parameter passing的灵活性,或者直接将元素作为可变长度parameter passing给方法。

我知道这是一个古老的问题,虽然这个答案并不直接解决如何解决编译器施加的限制,但方法重载是一种替代方法:

  public void DoSomething(int index, bool thirdParam = true){ DoSomething(index, new ushort[] {}, thirdParam); } public void DoSomething(int index, ushort[] array, bool thirdParam = true){ ... }