使用" params"的方法有几个重载。关键词

时间:2012-12-26 10:08:37

标签: c# .net overloading params-keyword

我看过Path.Combine并注意到它有四个重载:

  1. stringstring
  2. stringstringstring
  3. stringstringstringstring
  4. params string[]
  5. 前三个过载有用吗?
    我看到它的方式,第四次超载使其他人毫无意义。我查看了源代码,我确实看到第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个params重载,它根据数组的长度决定使用哪个实现。

3 个答案:

答案 0 :(得分:5)

根据这个答案https://stackoverflow.com/a/2796763/385844,这是为了避免创建参数数组的开销,并且因为非params重载对于不支持可变长度参数列表的语言的用户来说很方便。

另见

Why does string.Format come in several flavors?

答案 1 :(得分:1)

就像Oded说的那样,我发现它一定是为了向后兼容,因为我在2.0,3.5中找不到它

我认为重载是从4.0开始的

至于其他很多重载,我不会代表.net团队,但我觉得他们觉得每次都增加重载是毫无意义的,所以他们停在4并且提供了超过4个字符串组合的字符串数组 - 我认为这是明智的

我的解释基于Lambda表达式,团队停在了16个参数

Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)

Path.Combine可能就是这样,但没有意义。

答案 2 :(得分:0)

我只能说我与其他C#开发人员的经验。

并非所有开发人员都熟悉或熟悉params语法(以及技术名称​​可变参数函数参数无效)。
我知道我必须一遍又一遍地解释它,所以看到电话

并不罕见
instance.ParamsMethod(new int[]{1});
//or even
instance.ParamsMethod(new List<int>{1}.ToArray());

用于编写为:

的方法

public void ParamsMethod(params int [] source){}

否定params(然后是一些)的所有甜的语法糖。

因此,我个人的偏好是提供1和2参数的情况作为重载,因为这有点使得更难以不必要地混乱代码。由于过载链接,调用速度稍慢,但它有助于使代码更清晰。