在我自己的类上使用集合初始值设定项
本文关键字:集合 自己的 我自己 | 更新日期: 2023-09-27 18:27:26
我正在尝试将集合初始化添加到我的类中。我在这里读到了初始化程序:https://msdn.microsoft.com/en-us/library/bb384062.aspx#Anchor_2
我将引用困扰我的重要部分:
当初始化实现IEnumerable的集合类或具有Add扩展方法的类时,可以使用集合初始化器指定一个或多个元素初始化器。
好的,所以我想强调一下或这个词。当我读到它的时候,我应该能够用Add方法创建一个类,然后集合初始值设定项应该在这个类上工作吗?事实似乎并非如此。我注意到的一件事是,它实际上说的是一个Add扩展方法。因此,我也尝试将Add创建为一个扩展方法,但没有成功。
这是我尝试过的一个不起作用的小样本:
public class PropertySpecificationCollection
{
private List<PropertySpecification> _internalArr;
public void Add(PropertySpecification item)
{
_internalArr.Add(item);
}
}
这句话除了我的解释之外还有其他解释吗?我试着一遍又一遍地读,看看我是否能用其他方式解读它,但没能做到
所以我想我的问题是:我是不是解释错了,是不是遗漏了什么,或者MSDN上对集合初始化程序的描述有错误?
它应该是"and",而不是"or"。
集合初始化器在C#语言规范第7.6.10.3节"集合初始化器:"中进行了描述
应用集合初始值设定项的集合对象必须是实现System.Collections.Enumerable的类型,否则将发生编译时错误。对于按顺序指定的每个元素,集合初始值设定项调用目标对象上的Add方法,并将元素初始值设定值的表达式列表作为参数列表,为每次调用应用正常的重载解析。因此,集合对象必须包含适用于每个元素初始值设定项的Add方法。
它明确指出集合必须实现IEnumerable
并且需要一个Add
方法。对Add
方法的调用是使用正常的过载解析过程来解析的,因此它可以是扩展方法、通用方法等。