如何定义一个函数,该函数接受一个可选的数组参数,且默认为空数组?
public void DoSomething(int index, ushort[] array = new ushort[] {},
bool thirdParam = true)
'array'的默认参数值必须是编译时常量。
如何定义一个函数,该函数接受一个可选的数组参数,且默认为空数组?
public void DoSomething(int index, ushort[] array = new ushort[] {},
bool thirdParam = true)
'array'的默认参数值必须是编译时常量。
你无法创建对象引用的编译时常量。
唯一有效的编译时常量是null
,因此请将您的代码更改为:
public void DoSomething(int index, ushort[] array = null,
bool thirdParam = true)
在你的方法内部执行以下操作:
array = array ?? new ushort[0];
(来自评论) 从C# 8开始,您还可以使用更简短的语法:
array ??= new ushort[0];
array ??= new ushort[0];
- Éric BergeronArray.Empty<ushort>()
。 - Yousefpublic void DoSomething(int index, bool wasThirdParam = true, params ushort[] array)
我知道这是一个老问题,虽然这个答案并不能直接解决编译器所施加的限制,但方法重载是一种替代方法:
public void DoSomething(int index, bool thirdParam = true){
DoSomething(index, new ushort[] {}, thirdParam);
}
public void DoSomething(int index, ushort[] array, bool thirdParam = true){
...
}
-foptimize-sibling-calls
,但它是C++,我不确定C#编译器是否可以)*。 - Hi-Angel