【问题标题】:Method parameter array default value [duplicate]方法参数数组默认值
【发布时间】:2012-09-18 09:34:12
【问题描述】:

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

public void SomeMethod(String someString = "string value")
{
    Debug.WriteLine(someString);
}

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

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

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

【问题讨论】:

  • 引用类型有一个解决方法。将参数默认设置为“null”。然后,在代码块内部检查参数是否设置为 null,如果为 null,则设置引用类型参数的默认值。

标签: c# arrays parameters default-value optional-parameters


【解决方案1】:

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

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

  • 一个常量表达式;
  • new 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);
    }
}

【讨论】:

  • 好的,谢谢。我会尝试一下。我会在大约 11 分钟后接受这个作为我的答案。
【解决方案2】:

试试这个:

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

【讨论】:

  • 感谢您的意见。这似乎是一个不错的方法,但是我将坚持 Reed 对此的回答,因为它对我来说在其他一些方面也很方便。
  • +1 这是一种巧妙的方法,但它无法区分用户 显式 传入 null 和不使用参数(即为什么我通常更喜欢重载方法)。在这种情况下,这可能很重要,也可能不重要。
  • int[] arrayString 怎么样?我尝试使用arrayString = arrayString ?? { 0 };,但出现编译器错误CS1525: Invalid expression term '{'
  • 没关系,我把它改成arrayString = arrayString ?? new int[] { 0 };解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 2015-12-10
  • 1970-01-01
  • 2012-08-04
  • 2021-11-18
  • 2019-09-11
  • 2022-01-18
相关资源
最近更新 更多