C#3.0のようにオプションのパラメータを追加する方法はありますか?私はこの機能を持っている、私はちょうど待つことができない!C#3.0の名前付き/オプションのパラメータ?
編集:
あなたが仕事アラウンド/これを達成するためにハックを知っていれば、またそれを投稿。ありがとう!
C#3.0のようにオプションのパラメータを追加する方法はありますか?私はこの機能を持っている、私はちょうど待つことができない!C#3.0の名前付き/オプションのパラメータ?
編集:
あなたが仕事アラウンド/これを達成するためにハックを知っていれば、またそれを投稿。ありがとう!
あなたが名前付きパラメータの回避策として、匿名型と反射を使用することができます。
public void Foo<T>(T parameters)
{
var dict = typeof(T).GetProperties()
.ToDictionary(p => p.Name,
p => p.GetValue(parameters, null));
if (dict.ContainsKey("Message"))
{
Console.WriteLine(dict["Message"]);
}
}
だから今、私はこのようにはFooを呼び出すことができます。
Foo(new { Message = "Hello World" });
...それは私のメッセージを書くでしょう。
基本的には、渡された匿名型からすべてのプロパティを抽出し、文字列とオブジェクトの辞書(プロパティの名前とその値)に変換しています。
残念ながら、これをサポートするにはC#4.0コンパイラが必要です。今日の.NETプラットフォームでオプションのパラメータが必要な場合は、VB .NETまたはF#を試すことができます。
常にメソッドのオーバーロードがあります。 :)
ダスティン氏によると、オプションのパラメータはC#4.0にあります。オプションのパラメータをシミュレートするためのある種の厄介な方法は、最後の引数としてオブジェクト[](またはより強く型付けされた配列)を持つことです。
最後のobject []引数の前に 'params'キーワードを使用すると、呼び出すのが簡単なものもあります。 –
オプション引数として可変引数を使用することもできます。これが動作する方法の例は、string.Format()です。
こちらをご覧ください:
http://blogs.msdn.com/csharpfaq/archive/2004/05/13/131493.aspx
これを実際に使っているのは私には見えませんが、かなり賢いです。もちろん、反射オーバーヘッドを避けるために、非匿名型を使用することもできます。 –
私は、月曜日に仕事に戻る前に、これで済ますことができるすべてのクールなものを巡回していることを確認するつもりです。非常に賢い! – scwagner
+1、うわー、それはかなりクールです。 –