4

TroelsenのProC#2010をざっと見ていて、paramsキーワードメソッド修飾子の議論に出くわしました。テキスト、MSDN、およびその他のtubezソースを読むと、paramsから取得できるのは、コンマで区切られた値のリストをメソッドに渡す機能だけだと思います。paramsキーワードを使用しないメソッドにさまざまな長さの配列を送信できることを証明するために、いくつかのコードを作成しました。すべてが正常に機能します。

今、私はそれが理にかなっているときにキーストロークを保存することに賛成です。ただし、この場合、節約は幻想的であり、コードを維持しなければならない人にとっては混乱を招くと思います。ハードコードされた値のリストをメソッドに送信することは決してないので、幻想的です(悪い形式です!)。私がしていることを説明するオブジェクトではなく、一連の値をリストするメソッドを作成するためのメンテナーは何であるかという理由で混乱しますか?

OTOH、MSのほとんどの人、そしてここのほとんどの人は私より頭がいいので、何かが足りないのではないかと思います。どうか、誰でも、私を啓発してください!

ありがとう。

4

3 に答える 3

4

を使用したことがありますConsole.WriteLineか?

Console.WriteLine("{0}: The value of {1} is {2}.", lineNumber, foo, bar);

この種の呼び出しは、params役に立つ可能性がある場所です。パラメータを含むために配列を明示的に構築する必要があるのは単なるノイズであり、値を追加しないとコードが読みにくくなります。params使用されていない場合の外観と比較してください。

Console.WriteLine("{0}: The value of {1} is {2}.", new object[] { lineNumber, foo, bar });

2 番目のバージョンはコードに有用な情報を追加せず、値をフォーマット文字列から遠ざけるため、何が起こっているのかわかりにくくなっています。

于 2012-07-02T23:25:13.687 に答える
2

次のように入力する方が簡単だからです。

SomeFuncWithParams(a, b, c);

次のように入力するよりも:

SomeFuncWithParams(new object[] { a, b, c });

また、シンタックス シュガーが機能を実装する正当な理由ではないと考える場合は、プロパティ、usingステートメント、オブジェクト初期化子などの有効性についても疑問を投げかける必要があります。

于 2012-07-02T23:25:29.000 に答える
0
  1. はい、私は常に、.Net の "params" キーワードを、C/C++ 可変引数の道徳的同等物と考えてきました。

  2. いいえ、「params」と可変長配列が完全に同等ではないということは考えられません。

于 2012-07-02T23:26:39.047 に答える