C#4.0:方法参数默认值为数组

时间:2010-06-29 06:30:43

标签: .net-4.0 c#-4.0

是否可以在C#4.0方法中将默认值参数作为数组(对于ex.string [] sArray)? 如果是的话,如何实施呢?

我尝试了如下调用函数:

MethodA(string[] legends=new string[]{"a","b"},float[] values=new float[]{1,2}, string alt="sd");

这不起作用

2 个答案:

答案 0 :(得分:10)

正如其他人所说,默认值不能是数组。但是,避免这种情况的一种方法是将默认值设为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;
}

答案 1 :(得分:3)

默认值必须是编译时常量,这意味着不能使用数组。

标准(第312页)说明了这一点:

  

default-argument中的表达式必须是以下之一:

     
      
  • 一个常量表达式
  •   
  • 新S()形式的表达式,其中S是值类型
  •   
  • 形式为default(S)的表达式,其中S是值类型
  •