c#对象初始化程序的复杂性.最佳实践

And*_*rko 22 c# object-initializers

当对象初始化器出现在C#中时,我太兴奋了.

MyClass a = new MyClass();
a.Field1 = Value1;
a.Field2 = Value2;
Run Code Online (Sandbox Code Playgroud)

可以改写得更短:

MyClass a = new MyClass { Field1 = Value1, Field2 = Value2 }
Run Code Online (Sandbox Code Playgroud)

对象初始化程序代码更加明显,但是当属性数量达到数十并且某些赋值处理可空值时,很难调试"空引用错误"的位置.Studio将整个对象初始值设定项显示为错误点.

现在我只使用对象初始化程序进行简单的赋值,以实现无错误的属性.

如何使用对象初始化程序进行复杂的分配,或者使用十几个分配是不好的做法?

先感谢您!

Jon*_*eet 18

好吧,我对象初始化器的主要优点是它们需要一个可变类型开头:在可能的情况下,我更喜欢使用不可变类型.话虽如此,当一个对象初始化将工作(如UI控件),我倾向于使用它们.

如果赋值的值特别复杂,我可能会三思而后行 - 特别是,你必须能够在单个表达式中获取值,并且最终可能比在几个语句中计算它更不易读.但在开始时可行的情况下,这种情况相对较少.

我不能说我在使用对象初始值设定项进行属性赋值时遇到异常问题 - 这不是我想出的问题.如果确实如此,我可能会尝试编写一个失败的单元测试,此时代码通常很容易修复而无需调试器.

显然,审核始终是一件好事 - 我并不是建议将其置于极端......但如果您设置了十几个属性,那么使用对象初始化程序对我来说不会像拥有十几个属性一样令人担忧设置为开始.这些十几个属性中的任何一个都相关吗?那些应该以某种方式封装在一起吗?(在某些情况下,这是很好-再次,特别是与UI控件-但往往不是这样的.)