【问题标题】:Use object initializer - Resharper suggestion使用对象初始化器 - Resharper 建议
【发布时间】:2014-01-08 02:45:31
【问题描述】:

我每天都使用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调试:(

【问题讨论】:

    标签: c# optimization resharper object-initializers


    【解决方案1】:

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

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

    这里有一篇关于使用对象初始化器的优点的长文:

    【讨论】:

    • 我可能对它的可读性有相反的看法,认为不必要的句法组合更容易导致混乱的难以理解的代码(重新锐化后,我们有一个有趣的趋势,即在单个参数列表中复杂的初始化器链, blech),但这是一个很好的答案,可以进一步阅读并解决完整的问题,谢谢。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 2011-05-08
      • 2012-06-16
      • 2013-06-27
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      相关资源
      最近更新 更多