質問
C#4.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で提供されます。オプションのパラメーターをシミュレートする方法の1つは、最後の引数としてobject [](またはより厳密に型指定された配列)を使用することです。
オプション引数として変数引数を使用することもできます。これが機能する方法の例はstring.Format()です。
こちらをご覧ください:
http://blogs.msdn.com/csharpfaq /archive/2004/05/13/131493.aspx
所属していません StackOverflow