在对象初始化器中使用集合初始化器

public class Tag
{
    public IList<string> Synonyms { get; set; }
}

Synonyms 是一个集合类型的属性。当使用对象初始化器语法创建 Tag 对象时,也可以使用集合初始化器语法初始化 Synonyms

Tag t = new Tag 
{
    Synonyms = new List<string> {"c#", "c-sharp"}
};

collection 属性可以是 readonly,仍然支持 collection initializer 语法。考虑这个修改过的例子(Synonyms 属性现在有一个私有的 setter):

public class Tag
{
    public Tag()
    {
        Synonyms = new List<string>();
    }
    
    public IList<string> Synonyms { get; private set; }
}

可以像这样创建一个新的 Tag 对象:

Tag t = new Tag 
{
    Synonyms = {"c#", "c-sharp"}
};

这是有效的,因为集合初始化器只是对 Add() 调用的合成糖。这里没有创建新列表,编译器只是在退出对象上生成对 Add() 的调用。