7

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

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

集合初始值设定项允许您在初始化实现 IEnumerable 的集合类或具有Add扩展方法的类时指定一个或多个元素初始值设定项。

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

这是我尝试过的一个小样本,但它不起作用:

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

报价是否受制于我以外的其他解释?我试图一遍又一遍地阅读它,看看我是否可以用其他方式解释它,但没有这样做。

所以我想我的问题是:我是否解释错了,我是否遗漏了什么,或者 MSDN 上对集合初始化程序的描述是否有错误?

4

1 回答 1

5

它应该是“和”,而不是“或”。

集合初始值设定项在C# 语言规范的第 7.6.10.3 节集合初始值设定项中进行了描述:

应用集合初始值设定项的集合对象必须是实现 System.Collections.IEnumerable 的类型,否则会发生编译时错误。对于按顺序指定的每个指定元素,集合初始化程序调用目标对象的 Add 方法,并将元素初始化程序的表达式列表作为参数列表,对每个调用应用正常的重载决策。因此,集合对象必须包含适用于每个元素初始值设定项的 Add 方法。

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

于 2015-12-20T19:05:54.217 回答