用于Fluent界面的IDictionary AddAndReturn扩展

tug*_*erk 2 c# dictionary fluent-interface idictionary

什么好看的JQuery这是一个伟大的JavaScript库是为了能够得到你的工作作为返回值的元素.这是我所指的一个例子:

$(function() { 
    $("#poo").css("clear", "both").css("margin", "10px");
});
Run Code Online (Sandbox Code Playgroud)

我想在这里尝试实现的内容与上面的C#代码完全相同IDictionary interface.我的意图是能够正确编码如下:

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

所以我创建了一个扩展方法,如下所示IDictionary:

public static IDictionary<string, string> AddAndReturn(this IDictionary<string, string> dictionary, string key, string value) {

    dictionary.Add(key, value);
    return dictionary;
}
Run Code Online (Sandbox Code Playgroud)

现在我可以像以下一样使用它:

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

所以,至于这里的问题,我想知道的是我是否在这里遵循正确的道路.

我正在做一个穷人流畅的界面实现还是完全无关?

在C#中是否有任何已知的此实现案例?

x0n*_*x0n 6

虽然您的实现模式是正确的(并且是常见的),但您的用例可能不是最佳选择.Object Collection初始化程序也适用于字典类型:

var poo =  new Dictionary<string,string> {
        { "key1", "value1" },
        { "key2", "value2" },
        { "key3", "value3" }, // this is permissible
};
Run Code Online (Sandbox Code Playgroud)

编译器神奇地将其转换为Add(字符串,字符串)调用.顺便说一句,最后一对之后显然是错误的逗号是故意的.编译器允许这样做,因此您可以简化代码生成器(如T4)中的逻辑.

  • 快速术语:这些是*集合初始值设定项*。但是,是的,这是惯用的方法。 (2认同)