我自己使用集合初始化器 class

Using collection initializer on my own class

我正在尝试将集合初始化添加到我的 class。我在这里阅读了初始化程序:https://msdn.microsoft.com/en-us/library/bb384062.aspx#Anchor_2

我会引用令我困惑的重要部分:

Collection initializers let you specify one or more element initializers when you initialize a collection class that implements IEnumerable or a class with an Add extension method.

好的,所以我想强调这个词。在我阅读它时,我应该能够使用 Add 方法创建一个 class,然后集合初始化程序应该在这个 class 上工作?似乎并非如此。我注意到的一件事是,它实际上确实说了一个添加扩展方法。所以我也尝试创建 Add 作为扩展方法,但无济于事。

这是我试过但不起作用的小样本:

public class PropertySpecificationCollection
{
    private List<PropertySpecification> _internalArr;
    public void Add(PropertySpecification item)
    {
        _internalArr.Add(item);
    }
}

报价是否受我以外的其他解释的影响?我试着一遍又一遍地阅读它,看看我是否可以用任何其他方式来解释它,但没有这样做。

所以我想我的问题是:我是不是理解错了,是不是遗漏了什么,还是 MSDN 上对集合初始化器的描述有误?

应该是"and",不是"or"。

集合初始值设定项在 C# language specification 部分 7.6.10.3 集合初始值设定项中进行了描述:

The collection object to which a collection initializer is applied must be of a type that implements System.Collections.IEnumerable or a compile-time error occurs. For each specified element in order, the collection initializer invokes an Add method on the target object with the expression list of the element initializer as argument list, applying normal overload resolution for each invocation. Thus, the collection object must contain an applicable Add method for each element initializer.

它明确指出该集合必须实现 IEnumerable 并且 需要有一个 Add 方法。对 Add 方法的调用使用正常的重载解析过程进行解析,因此它可以是扩展方法、泛型方法等。