字典AddAndReturn扩展流畅接口

本文关键字:接口 扩展 AddAndReturn 字典 | 更新日期: 2023-09-27 18:08:06

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#中有任何已知的实现案例吗?

字典AddAndReturn扩展流畅接口

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

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

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

在c#中有任何已知的实现案例吗?

关于这一点,我想补充的是,StringBuilder.Append()方法返回StringBuilder,使方法可链接,例如:

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

但是在。net中这样的例子并不多。