2012-12-26 25 views
5

我在Path.Combine一看,发现它有四个重载:几个重载的方法与 “PARAMS” 关键字

  1. stringstring
  2. stringstringstring
  3. stringstringstringstring
  4. params string[]

前三种重载如何有用?
我看到它的方式,第四次重载使其他人毫无意义。我查看了源代码,并且我确实看到第四个重载的实现有点不同,但即使在这种情况下,我也希望只有一个重载,它根据数组的长度决定使用哪个实现。

+0

那么'Combine(String,String)'有向后兼容性(4之前的版本没有任何其他重载)。 – Oded

+0

据我所知,非参数重载允许您跳过创建参数数组和参数迭代器的开销。但我不记得我在哪里阅读,所以我在评论而不是回答。 – phoog

+0

@phoog - 这是有道理的。大多数用途需要结合多达4个路径部分。 – Oded

回答

1

就像奥德说,我发现,它必须已经存在了向后兼容性,因为我无法发现它在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本来可以像那样,但毫无意义。

+1

是的,但它不能解释3和4个字符串重载(特别是因为params数组超载是在同一时间添加的)。 – Oded

+0

@Oded查看我的更新。希望正轨? – codingbiz

+2

“行动”的事情是不同的,目前没有办法为'params'通用定义。 – SWeko

0

我只能说见我与其他C#开发经验。

不是所有的开发人员都熟悉或习惯params语法(并且事实上技术名称是可变参数函数没有帮助)。
我知道我不得不一遍又一遍地解释它,所以它是很平常看到当作使用电话

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

的方法:

公共无效ParamsMethod(PARAMS INT []源){}

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

所以,我的个人偏好是提供1和2参数的情况下重载,因为这样会使得难以不必要地混淆代码。由于过载链接,该呼叫稍微慢一点,但它有助于制作更清晰的代码。