Расширение IDictionary AddAndReturn для интерфейса Fluent - PullRequest
2 голосов
/ 10 сентября 2011

Что хорошего в JQuery , который является отличной библиотекой JavaScript, в том, что он может получить элемент, с которым вы работаете, в качестве возвращаемого значения.Вот пример того, что я имею в виду:

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

То, что я хотел бы попытаться реализовать здесь, идентично приведенному выше коду для C # IDictionary interface.Мое намерение состоит в том, чтобы иметь возможность исправить код следующим образом:

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 #?

Ответы [ 2 ]

6 голосов
/ 10 сентября 2011

Несмотря на то, что ваш шаблон реализации правильный (и при этом общий), ваш вариант использования, вероятно, не лучший выбор. Объект Инициализаторы коллекций работают и для типов словарей:

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

Компилятор волшебным образом превращает это в вызовы Add (string, string). Кстати, очевидно, ошибочная запятая после последней пары является преднамеренной. Компилятор позволяет это, чтобы вы могли упростить логику в генераторах кода, таких как T4.

0 голосов
/ 11 сентября 2011

Я также хотел бы добавить кое-что относительно "Есть ли какой-либо известный случай для этой реализации в C #?"

Метод StringBuilder.Append возвращает StringBuilder, что делает метод цепным, например sb.Append("a").Append("b"). Append("c").

Но в .Net таких примеров не так много.

...