2

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# 中这个实现有什么已知的案例吗?

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 回答