我在Path.Combine
一看,发现它有四个重载:几个重载的方法与 “PARAMS” 关键字
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三种重载如何有用?
我看到它的方式,第四次重载使其他人毫无意义。我查看了源代码,并且我确实看到第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个重载,它根据数组的长度决定使用哪个实现。
我在Path.Combine
一看,发现它有四个重载:几个重载的方法与 “PARAMS” 关键字
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三种重载如何有用?
我看到它的方式,第四次重载使其他人毫无意义。我查看了源代码,并且我确实看到第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个重载,它根据数组的长度决定使用哪个实现。
根据这个回答,https://stackoverflow.com/a/2796763/385844,这是为了避免创建参数数组的开销,并且因为非参数重载对于不支持可变长度参数列表的语言的用户很方便。
也
就像奥德说,我发现,它必须已经存在了向后兼容性,因为我无法发现它在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本来可以像那样,但毫无意义。
我只能说见我与其他C#开发经验。
不是所有的开发人员都熟悉或习惯params
语法(并且事实上技术名称是可变参数函数没有帮助)。
我知道我不得不一遍又一遍地解释它,所以它是很平常看到当作使用电话
instance.ParamsMethod(new int[]{1});
//or even
instance.ParamsMethod(new List<int>{1}.ToArray());
的方法:
公共无效ParamsMethod(PARAMS INT []源){}
否定所有甜句法糖params
(然后一些)。
所以,我的个人偏好是提供1和2参数的情况下重载,因为这样会使得难以不必要地混淆代码。由于过载链接,该呼叫稍微慢一点,但它有助于制作更清晰的代码。
那么'Combine(String,String)'有向后兼容性(4之前的版本没有任何其他重载)。 – Oded
据我所知,非参数重载允许您跳过创建参数数组和参数迭代器的开销。但我不记得我在哪里阅读,所以我在评论而不是回答。 – phoog
@phoog - 这是有道理的。大多数用途需要结合多达4个路径部分。 – Oded