我看过Path.Combine
并注意到它有四个重载:
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三个过载有用吗?
我看到它的方式,第四次超载使其他人毫无意义。我查看了源代码,我确实看到第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个params
重载,它根据数组的长度决定使用哪个实现。
答案 0 :(得分:5)
根据这个答案https://stackoverflow.com/a/2796763/385844,这是为了避免创建参数数组的开销,并且因为非params重载对于不支持可变长度参数列表的语言的用户来说很方便。
另见
答案 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参数的情况作为重载,因为这有点使得更难以不必要地混乱代码。由于过载链接,调用速度稍慢,但它有助于使代码更清晰。