对象初始值设定项的这种变体在哪里记录?

时间:2014-05-12 18:03:07

标签: c# object-initializers

我在MSDN:Object and Collection Initializers上没有看到任何解释。具体来说,我注意到可以使用对象初始值设定项在子类型上设置属性,而不是新建子类型本身。

语法本身与我对MSDN页面的理解不符。我知道我可以使用对象初始值设定项来设置初始化对象的字段,但是没有看到记录的位置可以设置字段的字段。

我认为这是合法的。人们可以用bt.subType.subTypeValue=5;完成同样的事情。

class BasicSubType
{
    public int subTypeValue;
}

class BasicType
{
    public BasicSubType subType {get;private set;}
    public BasicType()
    {
        subType = new BasicSubType();
    }
}

void Main()
{
    BasicType bt = new BasicType{subType={subTypeValue=5}};
}

1 个答案:

答案 0 :(得分:2)

我不确定您在用户文档中找到它的位置,但在对象初始化器一节中的语言规范中明确说明了这一点:

  

在等号后面指定对象初始值设定项的成员初始值设定项是嵌套对象初始值设定项,即嵌入对象的初始化。而不是为字段或属性分配新值,嵌套对象初始值设定项中的赋值被视为对字段或属性成员的赋值。嵌套对象初始值设定项不能应用于具有值类型的属性,也不能应用于具有值类型的只读字段。

此文字也是Overview of C# 3.0的一部分。