質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top