4

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

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

OTOH,由于 MS 的大多数人以及这里的大多数人都比我聪明,我怀疑我错过了一些东西。请各位大神赐教!

谢谢。

4

3 回答 3

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 });

第二个版本没有向代码添加有用的信息,并且将值从格式字符串移到了更远的位置,从而更难看到发生了什么。

于 2012-07-02T23:25:13.687 回答
2

因为我更容易输入:

SomeFuncWithParams(a, b, c);

比输入:

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

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

于 2012-07-02T23:25:29.000 回答
0
  1. 是的,我一直认为 .Net “params”关键字是 C/C++ 可变参数的道德等价物。

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

于 2012-07-02T23:26:39.047 回答