方法参数数组默认值
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 ;
解决了以上是关于方法参数数组默认值的主要内容,如果未能解决你的问题,请参考以下文章