1

我在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}};
}
4

1 回答 1

2

我不确定您在用户文档中的哪里可以找到它,但它在对象初始化器部分的语言规范中得到了专门解决:

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

此文本也是C# 3.0 概述的一部分。

于 2014-05-12T18:15:50.477 回答