使用对象初始化程序 - Resharper建议

Was*_*RAR 31 c# resharper optimization object-initializers

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

MyClass myClass = new MyClass();
myClass.MyInt = 0;
myClass.MyString = string.Empty;
Run Code Online (Sandbox Code Playgroud)

它被替换为:

MyClass myClass = new MyClass
{
    MyInt = 0, 
    MyString = string.Empty
};
Run Code Online (Sandbox Code Playgroud)

这是否可以优化代码的执行,还是仅仅是重新格式化的问题?

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

ReSharper的

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

Cyr*_*don 27

第二个包含较少的字符,因此读取更紧凑.您不必再重复myClass 2,初始化逻辑在一个块中.

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

关于在这里使用Object Initializers的优势的更长篇幅:


Zor*_*vat 6

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

MyClass c = new MyClass() 
{
    MyInt = 3,
    MyString = GenerateString(9)
};
Run Code Online (Sandbox Code Playgroud)

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

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