方法使用"params"关键字的几个重载

5

我查看了Path.Combine,发现它有四个重载:

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

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


Combine(String, String) 存在是为了向后兼容(4 版本之前没有其他重载)。 - Oded
据我理解,非参数重载允许您跳过创建参数数组和参数迭代器的开销。我不记得在哪里看到过,所以我只是发表评论而不是回答。 - phoog
@phoog - 那很有道理。大多数使用情况需要组合最多4个路径部分。 - Oded
1
@Oded 实际上,我是在一般地谈论那些看似不必要地有1、2和3个参数的params方法。这里有同样的问题,但是是关于string.Format的:https://dev59.com/h3E85IYBdhLWcg3wZymt - phoog
3个回答

5

1

就像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可能本来可以这样,但是没有意义。


1
是的,但它没有解释3和4个字符串重载(特别是因为params数组重载同时添加)。 - Oded
2
Action 的东西是不同的,目前没有一种方法可以为 params 泛型定义。 - SWeko

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参数情况的重载,因为这样可以在不必要地使代码混乱时使其更难。由于重载链接,调用速度略慢,但它有助于使代码更清晰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接