5

私は見ていて、Path.Combine4つのオーバーロードがあることに気付きました:

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

最初の 3 つのオーバーロードはどのように役立ちますか?
私の見方では、4 番目のオーバーロードは他のオーバーロードをかなり無意味にします。paramsソースを調べたところ、4 番目のオーバーロードの実装が少し異なることがわかりましたが、この場合でも、配列の長さに基づいて使用する実装を決定するオーバーロードが1 つだけあると予想されます。

4

3 に答える 3

5

この回答https://stackoverflow.com/a/2796763/385844によると、パラメーター配列を作成するオーバーヘッドを回避するためであり、可変長をサポートしていない言語のユーザーにとって非パラメーターのオーバーロードが便利であるためです。パラメータリスト。

こちらもご覧ください

string.Format にいくつかの種類があるのはなぜですか?

于 2012-12-26T10:37:55.967 に答える
1

Odedが言ったように、2.0、3.5では見つからなかったので、下位互換性のためにそこにあったに違いないことがわかりました

過負荷は4.0で始まったと思います

  • Path.Combine 4.0 - 正しいナビゲーションを見ると、オーバーロードが表示されます

他の多くのオーバーロードについては、私は .net チームを代弁しませんが、オーバーロードを毎回増やすのは無意味だと感じているので、4 で停止し、4 つを超える文字列の組み合わせに対して文字列の配列を提供しました。賢いです

チームが 16 個の引数で停止した Lambda 式に基づいて説明しました

アクション(T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、T15、T16)

Path.Combine はそのようにすることもできましたが、無意味です。

于 2012-12-26T10:22:29.693 に答える
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 のパラメーター ケースをオーバーロードとして提供することです。オーバーロード チェーンのため、呼び出しはわずかに遅くなりますが、コードをより明確にするのに役立ちます。

于 2012-12-26T10:44:12.317 に答える