5

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

  1. string,string
  2. string, string,string
  3. string, string, string,string
  4. params string[]

前三个重载有什么用?
在我看来,第四个重载使其他重载毫无意义。我查看了源代码,确实发现第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个params重载根据数组的长度决定使用哪个实现。

4

3 回答 3

5

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

也可以看看

为什么 string.Format 有几种风格?

于 2012-12-26T10:37:55.967 回答
1

正如 Oded 所说,我发现它一定是为了向后兼容,因为我在 2.0、3.5 中找不到它

我认为重载始于 4.0

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

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

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

Path.Combine 本来可以这样,但毫无意义。

于 2012-12-26T10:22:29.693 回答
0

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

并非所有开发人员都熟悉或熟悉params语法(技术名称是可变参数函数这一事实也无济于事)。
我知道我不得不一遍又一遍地解释它,所以看到电话并不罕见

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

对于写成的方法:

公共无效参数方法(参数 int [] 源){}

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

所以,我个人的偏好是提供 1 和 2 参数的情况作为重载,因为这在某种程度上使得不必要地混乱代码变得更加困难。由于重载链接,调用稍微慢了一点,但它有助于使代码更清晰。

于 2012-12-26T10:44:12.317 回答