方法参数数组默认值

Gab*_*tos 9 c# arrays parameters default-value optional-parameters

在c#中,可以在方法中使用默认参数值,例如:

public void SomeMethod(String someString = "string value")
{
    Debug.WriteLine(someString);
}
Run Code Online (Sandbox Code Playgroud)

但现在我想使用数组作为方法中的参数,并为其设置默认值.
我以为它应该看起来像这样:

public void SomeMethod(String[] arrayString = {"value 1", "value 2", "value 3"})
{
    foreach(someString in arrayString)
    {
        Debug.WriteLine(someString);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.
有没有正确的方法来做到这一点,如果这甚至可能的话?

Ree*_*sey 16

有没有正确的方法来做到这一点,如果这甚至可能的话?

这是不可能的(直接),因为默认值必须是以下之一(来自Optional Arguments):

  • 一个恒定的表达;
  • 表达式为新的ValType(),其中ValType是值类型,例如枚举或结构;
  • 形式为default(ValType)的表达式,其中ValType是值类型.

创建数组不适合可选参数的任何可能的默认值.

这里最好的选择是过载:

public void SomeMethod()
{
    SomeMethod(new[] {"value 1", "value 2", "value 3"});
}


public void SomeMethod(String[] arrayString)
{
    foreach(someString in arrayString)
    {
        Debug.WriteLine(someString);
    }
}
Run Code Online (Sandbox Code Playgroud)


Nat*_*han 12

试试这个:

public void SomeMethod(String[] arrayString = null)
{
    arrayString = arrayString ?? {"value 1", "value 2", "value 3"};
    foreach(someString in arrayString)
    {
        Debug.WriteLine(someString);
    }
}
someMethod();
Run Code Online (Sandbox Code Playgroud)

  • +1这是一个灵巧的方法,但它没有给你一种方法来区分用户明确*传递null*而不使用参数(这就是为什么我通常更喜欢重载方法).在这种情况下,这可能也可能不重要. (4认同)
  • 没关系我通过将它改为`arrayString = arrayString来解决它?new int [] {0};` (4认同)