方法参数数组默认值

Posted

技术标签:

【中文标题】方法参数数组默认值【英文标题】: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,则设置引用类型参数的默认值。 【参考方案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 ;解决了

以上是关于方法参数数组默认值的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中能给方法参数赋默认值吗

数组作为方法参数- 数组作为方法返回值

Spring mvc 空数组作为默认值

JS基础(数组的方法)

如何设置默认方法参数值? [复制]

方法和数组