高级可选参数(c#)

max*_*axp 7 c# optional-parameters

如果有效,下面的代码会非常酷.但是,我无法编译,所以我假设这不会以任何形式工作?

public void foo(char[] bar = new char[]{'a'})
{
}
Run Code Online (Sandbox Code Playgroud)

下一个最好的选择就是做

public void foo(char[] bar = null)
{
   if (bar==null)
      bar = new {'a'};
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*aos 5

不,这是不可能的.默认值需要是编译时常量.默认值将插入调用者,而不是被调用者.如果调用者无法访问用于创建默认值的方法,则代码将成为问题.

但是你可以使用简单的重载:

public void foo(char[] bar)
{
}

public void foo()
{
  foo(new char[]{'a'});
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*rth 1

不可以,因为可选参数默认值需要保持不变。

为什么 C# 4.0 中的可选参数需要编译时常量?