メソッドパラメータの代替パラメータがありますか?
私はキーワードparamsが好きです。しかし、時には私はのパラメータである2つのパラメータが必要です。
私はそうのようなメソッドを呼び出したい:交互のパラメータ
Method(1, "a", 2, "b", 3, "c")
。
私は直感的にそうような2つのパラメータののparamsを使用しようとするメソッドのパラメータを定義しようとした場合:
void Method(params int[] i, string[] s)
コンパイラは、最初のパラメータとのすべてのパラメータに奇妙な位置にすべてのパラメータを追加します第2のパラメータへの位置も揃えます。
(ご存知のように)パラメータは、最後のパラメータでのみ使用できます。もちろん
私は、パラメータクラスを作成します(例えばKeyValue
)ので、それを使用することができます。
Method(new[] {new KeyValue(1, "a"), new KeyValue(2, "b"), new KeyValue(3, "c")})
しかし、それは芋あまりにも多くのコードです。
短い表記はありますか?
編集:それは一覧を継承し、新たなリストは、この方法で初期化することができるようにがメソッドを追加します。オーバーロードすることを提案:
はちょうど今、私は別の質問に良い answerを見つけましたnew KeyValueList<int, string>{{ 1, "a" }, { 2, "b" }, { 3, "c" }}
メソッドの定義は次のようになります。
void Method(KeyValueList<int, string> list)
コールは次のようになります。
Method(new KeyValueList<int, string>{{ 1, "a" }, { 2, "b" }, { 3, "c" }})
パラメータクラスを作成した場合(または 'Tuple'を使用する場合)、' params'キーワードを使用して、 'new {] {...}'を取り除くことができます。 –
いいえあなたが求めているようなものはありません。 'KeyValue'構文を短縮するには、パラメータの型として' params KeyValue [] pairs'を使うことができます。結果は 'Method(新しいKeyValue(1、" a ")、新しいKeyValue(2、" b ")、新しいKeyValue(3、" c "))'になります。それほど短くはない。 –
あなたはキーと値のペアを持っていますが、唯一正しい方法は、あなたの「あまりにも多くのコード」が悪質なコードを取り除かなければならないかもしれない貧しい人々を考えるなら、何らかの形のKey/Valueコレクションを使用することですいくつかの後の段階で! – Lloyd