我查看了Path.Combine
,发现它有四个重载:
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三个重载有什么用呢?
在我看来,第四个重载使得其他几个变得没什么意义。我查看了源代码,确实发现第四个重载的实现有所不同,但即使是这种情况,我也希望只有一个params
重载,根据数组长度来确定使用哪个实现。
我查看了Path.Combine
,发现它有四个重载:
string
, string
string
, string
, string
string
, string
, string
, string
params string[]
前三个重载有什么用呢?
在我看来,第四个重载使得其他几个变得没什么意义。我查看了源代码,确实发现第四个重载的实现有所不同,但即使是这种情况,我也希望只有一个params
重载,根据数组长度来确定使用哪个实现。
就像Oded所说的那样,我发现它必须是为了向后兼容而存在的,因为我在2.0、3.5中找不到它
我认为这个重载是从4.0开始的
至于其他很多重载,我不能代表.NET团队发言,但我觉得他们认为每次增加重载都是没有意义的,所以他们在4个字符串组合时停止,并提供了一个字符串数组——我认为这是明智的
我基于Lambda表达式来解释我的观点,其中团队在16个参数处停止了
Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Path.Combine可能本来可以这样,但是没有意义。
Action
的东西是不同的,目前没有一种方法可以为 params
泛型定义。 - SWeko我只能从我与其他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参数情况的重载,因为这样可以在不必要地使代码混乱时使其更难。由于重载链接,调用速度略慢,但它有助于使代码更清晰。
Combine(String, String)
存在是为了向后兼容(4 版本之前没有其他重载)。 - Oded