【问题标题】:How to debug object initializer code?如何调试对象初始化代码?
【发布时间】:2011-07-26 06:06:29
【问题描述】:

有没有办法在 Visual Studio 中逐步调试对象初始化程序代码?

例子:

return new Veranstaltung()
            {
                ID = tblVeranstaltung.VeranstaltungsID,
                Titel = tblVeranstaltung.Titel,
                KursNummer = tblVeranstaltung.Kursnummer,
                ErsterTermin = tblVeranstaltung.ersterTermin,
                Dauer = tblVeranstaltung.schulungsTage,
                StartZeit = tblVeranstaltung.BeginnZeit,
                EndZeit = tblVeranstaltung.Endzeit,
                KostenNettoValue = tblVeranstaltung.PreisNetto ?? default(decimal),
                IsLastMinute = tblVeranstaltung.lastMinute == 1,
                IsVerkuerzt = tblVeranstaltung.istVerkuerzt == 1,
                IsGeschlossen = tblVeranstaltung.istGeschlosseneVeranstaltung == 1,
                IsIntern = tblVeranstaltung.istInterneVeranstaltung == 1,
                StandortID = Convert.ToInt32(tblVeranstaltung.StandortID),
                LastMinuteRabatt = tblVeranstaltung.lastMinuteRabatt ?? default(decimal)
            };

有时我在这种代码中遇到错误(例如,当转换为 int 失败时)并且 VS 似乎无法单步执行它,它只会对整行抛出错误,我必须尝试哪个初始化失败。

有没有一种简单的方法来调试它,还是最好避免使用对象初始化器来进行大型或复杂的初始化?

我正在使用 VS 2010 和 C# 4.0。

【问题讨论】:

    标签: c# .net visual-studio debugging object-initializers


    【解决方案1】:

    对象初始化器应该被保留用于简单的对象初始化。如果您的对象构造函数的代码可能会失败(例如抛出异常),请不要使用它。最好依赖对象构造模式,这取决于您的需要可能是工厂方法、抽象工厂等... 这也确保了您的类的所有用户都无法构建处于无效状态的实例(例如,他们忘记初始化成员,或者他们使用不正确的值初始化相关成员等......)

    【讨论】:

      【解决方案2】:

      对于大型或复杂的初始化,最好避免使用对象初始化器?

      是的,它变得难以维护(和调试)。

      【讨论】:

        【解决方案3】:

        不确定在 Visual Studio 2010 中是否可行,但在 Visual Studio 2017 中,您可以通过在 Visual Studio Debug 中禁用跳过属性设置器的选项来做到这一点设置:

        【讨论】:

          【解决方案4】:

          Visual Studio 2010 中对对象初始化器的调试支持不是很好。出于这个原因,避免将对象初始化器用于大型或复杂的初始化可能是务实的,但我不考虑使用大型或复杂的(例如嵌套) 对象初始化本身就是一个糟糕的设计选择。

          我发现,对于表示文档/记录的映射对象(如您的示例),它形成了一种非常易读的声明式风格,最大限度地减少了代码中的“噪音”,并让读者更清楚地看到源和目标。这种方法还鼓励将数据映射与数据验证分开,我认为这是可取的。

          在以这种风格进行编码时,一个空安全的解引用运算符也会有很大帮助,但这是另一个话题!希望未来的 Visual Studio 版本可以改进这些有用结构的调试。

          【讨论】:

            【解决方案5】:

            Step Into (F11) 在 VS2015 及更高版本中调试时工作,无需任何配置。

            【讨论】:

              猜你喜欢
              • 2011-05-11
              • 2010-10-27
              • 2011-08-13
              • 1970-01-01
              • 2018-03-06
              • 2016-09-30
              • 1970-01-01
              • 2013-06-27
              • 1970-01-01
              相关资源
              最近更新 更多