方法签名中的params关键字究竟意味着什么

时间:2012-07-02 23:19:50

标签: c# arrays params

我正在浏览Troelsen的Pro C#2010,并讨论了params关键字方法修饰符。阅读文本,MSDN和其他tubez源代码,在我看来,你从params获得的唯一一件事就是能够将逗号分隔的值列表传递给方法。我写了一些代码来向自己证明我可以将不同长度的数组发送到不使用params关键字的方法,并且一切正常。

现在,我很赞成在有意义的时候保存击键。然而,在这种情况下,我怀疑节省是虚幻的,并且对那些必须维护代码的人感到困惑。虚幻,因为我永远不会将一个硬编码的值列表发送给一个方法(糟糕的形式!)。令人困惑,因为什么是维护人员的方法,列出一堆值而不是一个解释我正在做什么的对象?

OTOH,因为MS的大多数人和这里的大多数人都比我聪明,我怀疑我错过了什么。请任何人,赐教!

感谢。

3 个答案:

答案 0 :(得分:4)

你曾经使用过Console.WriteLine吗?

Console.WriteLine("{0}: The value of {1} is {2}.", lineNumber, foo, bar);

这种调用是params有用的地方。必须显式构造一个数组以包含您的参数只是噪声,这使得代码更难以读取而不添加任何值。与未使用params时的外观比较:

Console.WriteLine("{0}: The value of {1} is {2}.", new object[] { lineNumber, foo, bar });

第二个版本没有为代码添加任何有用的信息,并将值从格式字符串中进一步移动,这使得查看正在发生的事情变得更加困难。

答案 1 :(得分:2)

因为我更容易输入:

SomeFuncWithParams(a, b, c);

比输入:

SomeFuncWithParams(new object[] { a, b, c });

如果您认为语法糖不是实现功能的好理由,那么您还需要开始质疑属性的有效性,using语句,对象初始化器等。

答案 2 :(得分:0)

  1. 是的,我一直认为.Net“params”关键字是C / C ++可变参数的道德等价物。

  2. 不,我想不出“params”和变长数组不完全等价的任何方式。