【问题标题】:params Parameter with default parameter values [duplicate]params 具有默认参数值的参数[重复]
【发布时间】:2013-02-14 06:36:57
【问题描述】:

我看到params 参数的次数比我能说的要多,并且总是在不考虑它的含义的情况下将其删除。现在我知道了它的用途。刚刚学到的是params参数必须是参数列表中的最后一个。但这就是我对指定默认值的参数的了解。示例:

MyMethod(string Name, int blah=0). 

所以问题是如果我需要在需要使用params 的同时指定一个默认值,可以这样做吗?如果是这样,哪个必须最后声明?示例:

MyMethod(int blah=0, params string[] variableData). 

再次感谢您的帮助。詹姆斯

【问题讨论】:

  • 我认为这样做完全没问题。你试过了吗。
  • 大家好。谢谢你的cmets。直到昨晚我一直没有电脑。今天刚刚能够使用我的新笔记本电脑。这就是我无法测试它的原因。所以对于那些不知道的人,默认值参数是最后声明的,除非使用了 params。在后一种情况下,默认值参数是倒数第二个声明的,而 params 参数是最后一个声明的。谢谢!!!

标签: c# params


【解决方案1】:

你的例子是正确的:

public void TestMethod(string name = "asdasd", params int[] items)
{
}

params 必须在最后,无论在此之前使用什么参数。

【讨论】:

  • 你好 MarinJuraszek。感谢您的简单回答。我昨晚刚买了一台新笔记本电脑,终于能够测试我的场景以查看结果。我看你是绝对正确的!
【解决方案2】:

是的,params 是这里的一种特殊情况——它们是唯一一种没有默认值的参数可以出现在一个默认值之后.

但是,您不能在不指定可选参数的情况下调用该方法并利用 params 的优势(对于非空数组):

MyMethod(5, "x", "y");                            // Fine, no defaulting
MyMethod(variableData: new string[] { "x", "y"}); // Default for blah
MyMethod();                                       // Default for blah, empty variableData
MyMethod(new string[] { "x, "y" });               // Invalid   
MyMethod("x", "y");                               // Invalid

【讨论】:

  • 有趣的事实:当您添加默认参数值并重新编译时,编译器会循环并将这些默认参数插入到对您的方法的调用中 - 很难找到。
  • @JerKimball:是的,会的。这就是默认参数的工作方式——它们被烘焙到调用站点中。
猜你喜欢
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 2013-01-01
  • 2011-01-06
  • 2022-01-04
相关资源
最近更新 更多