2

優れたJavaScriptライブラリであるjQueryの優れている点は、作業中の要素を戻り値として取得できることです。これが私が言及しているものの例です:

$(function() { 
    $("#poo").css("clear", "both").css("margin", "10px");
});

IDictionary interface次のようにコードを記述できるように、C#にも同じように実装したいと思います。

IDictionary<string, string> myDictionary = 
    new Dictionary<string, string>().
        Add("key1", "value1").
        Add("key2", "value2").
        Add("key3", "value3");

だから私は以下のように拡張メソッドを作成しましたIDictionary

public static IDictionary<string, string> AddAndReturn(this IDictionary<string, string> dictionary, string key, string value) {
    dictionary.Add(key, value);
    return dictionary;
}

そして今、私はそれを次のように使用することができます:

IDictionary<string, string> poo = 
    new Dictionary<string,string>().
        AddAndReturn("key1", "value1").
        AddAndReturn("key2", "value2").
        AddAndReturn("key3", "value3");

私はここで正しい道をたどっているのではないかと思います。

私がやっていることは、貧乏人の流暢なインターフェースの実装ですか、それともまったく関係ありませんか?

C#でのこの実装の既知のケースはありますか?

4

2 に答える 2

7

実装パターンは正しいですが(そして一般的なパターンですが)、ユースケースはおそらく最良の選択ではありません。オブジェクトコレクション初期化子は、ディクショナリタイプでも機能します。

var poo =  new Dictionary<string,string> {
        { "key1", "value1" },
        { "key2", "value2" },
        { "key3", "value3" }, // this is permissible
};

コンパイラはこれを魔法のようにAdd(string、string)呼び出しに変換します。ところで、最後のペアの後の明らかに誤ったコンマは意図的です。コンパイラーはこれを可能にするので、T4などのコードジェネレーターのロジックを単純化できます。

于 2011-09-10T18:18:21.680 に答える
0

C#でのこの実装の既知のケースはありますか?

StringBuilder.Append()これに関して、メソッドがを返し、StringBuilderメソッドをチェーン可能にすることを追加したいと思います。

sb.Append("a").Append("b"). Append("c")

しかし、.NETにはそのような例は他に多くありません。

于 2011-09-10T20:54:50.653 に答える