C# 4.0是否支持将方法参数的默认值设置为数组(例如string[] sArray)?如果支持,如何实现?
我尝试像下面这样调用函数:
MethodA(string[] legends=new string[]{"a","b"},float[] values=new float[]{1,2}, string alt="sd");
它不能工作。
正如其他人所说,默认值不能为数组。然而,避免这个问题的一种方法是将默认值设为null,然后在必要时初始化数组:
public void Foo(int[] x = null)
{
x = x ?? new int[] { 5, 10 };
}
或者,如果您不会改变数组的内容或将其暴露给调用者:
private static readonly int[] FooDefault = new int[] { 5, 10 };
public void Foo(int[] x = null)
{
x = x ?? FooDefault;
}
请注意,这假定 null
不是你想以其他原因使用的值。这不是一种全局适用的想法,但在某些情况下效果很好,例如你无法将默认值表达为编译时常量。你可以用同样的方法来设置像 Encoding.UTF8
这样的东西作为默认编码。public void RunInParallel(int? cores = null)
{
int realCores = cores ?? Environment.ProcessorCount;
}
默认值必须是编译时常量,这意味着不能使用数组。
标准(第312页)如下所述:
默认参数中的表达式必须是以下之一:
- 常量表达式
- 形式为 new S() 的表达式,其中 S 是值类型
- 形式为 default(S) 的表达式,其中 S 是值类型