3

在回答问题时我遇到了这个

StringCollection sc = new StringCollection();

sc.Add("Foo");

但这可以写成

StringCollection sc = new StringCollection() {"Foo"};

这不能写

StringCollection sc = new StringCollection() {new string[] {"Foo"} };

这意味着Add方法被调用而AddRange不是。

我怎样才能使一个类具有在创建其对象时调用默认方法的功能?

4

2 回答 2

5

它被称为Collection Initializer。该类必须实现IEnumerable并具有公共Add方法。

该类可以有多种Add方法,例如

public class MyCollection : IEnumerable
{
    public void Add(string item) { ... }

    public void Add(string[] items) { ... }

    ...
}
于 2012-08-17T08:16:00.967 回答
2

该代码是一个集合初始化器:http: //msdn.microsoft.com/en-us/library/bb384062.aspx

集合初始化器允许您在初始化实现 IEnumerable 的集合类时指定一个或多个元素初始化器。元素初始值设定项可以是简单值、表达式或对象初始值设定项。通过使用集合初始化器,您不必在源代码中指定对类的 Add 方法的多次调用;编译器添加调用。

对“Add”的调用由编译器生成。因此,除非您编写自己的 C# 编译器,否则无法自定义调用“AddRange”的行为。

于 2012-08-17T08:17:21.007 回答