Nested object initializer syntax
Resharper刚刚向我建议了以下重构:
1 2 3 4 5 6 7 8 9 10 11 | // Constructor initializes InitializedProperty but // the UninitializedSubproperty is uninitialized. var myInstance = new MyClass(); myInstance.InitializedProperty.UninitializedSubproperty = new MyOtherClass(); // becomes var myInstance = new MyClass { InitializedProperty = { UninitializedSubproperty = new MyOtherClass() } }; |
我以前从未见过这种对象初始化。尤其是我不知道
1 |
有任何意义——它没有给
这种行为在任何地方都有规定吗?
这种语法称为对象初始化。C规范清楚地给出了许多关于这个主题的例子:
7.6.10.2对象初始值设定项0例子有:
1 2 3 4 5 |
编译为:
1 2 3 4 5 |
有:
2和
1 2 3 4 5 | public class Point { public int X { get; set; } public int Y { get; set; } } |
还可以考虑在C深入的书中阅读一个伟大的章节8.3简化的初始化。JonSkeet提供了使用这种语法初始化类树结构的另一个优点。