用于Fluent界面的IDictionary AddAndReturn扩展

时间:2011-09-10 18:15:08

标签: c# dictionary fluent-interface idictionary

一个优秀的JavaScript库JQuery的优点是能够将您正在处理的元素作为返回值。这是我所指的一个例子:

$(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 个答案:

答案 0 :(得分:6)

虽然您的实现模式是正确的(并且是常见的),但您的用例可能不是最佳选择。 Object 集合初始值设定项也适用于字典类型:

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

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

答案 1 :(得分:0)

我还想补充一些关于“C#中是否存在此实现的已知案例?”

StringBuilder.Append方法返回StringBuilder,使方法可链接,例如sb.Append("a").Append("b"). Append("c")

但是在.Net中没有很多其他的例子。