32

ReSharper每天都在使用,今天我问自己为什么 ReSharper 在我这样做时建议“使用对象初始化器”:

MyClass myClass = new MyClass();
myClass.MyInt = 0;
myClass.MyString = string.Empty;

它被替换为:

MyClass myClass = new MyClass
{
    MyInt = 0, 
    MyString = string.Empty
};

这是否优化了我的代码的执行,还是只是重新格式化的问题?

就个人而言,我喜欢它。但有时我讨厌它,因为:

锐器

我不能step-by-step调试:(

4

2 回答 2

28

第二个包含较少的字符,因此阅读起来更紧凑。您不必再重复 myClass 2 次,并且初始化逻辑在一个块中。

它实际上是一种语法糖,不会改变生成的代码中的任何东西。如果您不喜欢它,您可以随时禁用 ReSharper 上的警告。

关于使用 Object Initializers 的优点的更长的帖子:

于 2013-12-19T13:46:56.370 回答
6

如果初始化程序是函数调用,您可以部分地进行逐步调试:

MyClass c = new MyClass() 
{
    MyInt = 3,
    MyString = GenerateString(9)
};

在这种情况下,F11 将引导您直接进入 GenerateString 方法。

编辑:如果初始化程序是简单的值,那么逐步调试无论如何都是没有意义的。

于 2013-12-19T14:04:56.017 回答