参见英文答案 >
Initializer syntax 2个
>
Nested object initializer syntax 1个
这两个类初始值设定项之间产生的差异是什么?在C#中,两者似乎都是语法正确的.第二个是第一个的快捷方式吗?
Class1 class1 = new Class1()
{
Boolean1 = true,
Class2Instance = new Class2
{
Boolean2 = true,
},
};
和
Class1 class1 = new Class1()
{
Boolean1 = true,
Class2Instance =
{
Boolean2 = true,
},
};
我问,因为显然这样做无效:
Class1 class1 =
{
Boolean1 = true,
Class2Instance = new Class2()
{
Boolean2 = true,
},
};
最佳答案 你给出的两个例子并不完全相同.使用像ILSpy这样的工具,您可以检查编译器为这两个语句创建的内容.
第一个编译成如下所示(使用ILSpy反编译):
Class1 expr_06 = new Class1();
expr_06.Boolean1 = true;
expr_06.Class2Instance = new Class2
{
Boolean2 = true
};
而第二个示例编译为以下(使用ILSpy反编译):
Class1 expr_06 = new Class1();
expr_06.Boolean1 = true;
expr_06.Class2Instance.Boolean2 = true;
如您所见,在第二个示例中,缺少使用new-keyword创建Class2Instance,并且在运行此代码时将获得NullReferenceException.
但是,当您在Class1的构造函数中创建新的Class2Instance时,可以防止在第二个示例中获取NullReferenceException:
class Class1
{
public Class1()
{
Class2Instance = new Class2();
}
}