如何调试对象初始化代码?

时间:2011-03-30 16:47:58

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

有没有办法在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。

5 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:8)

  

或者为大型或复杂的初始化避免使用对象初始化器是否更好?

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

答案 2 :(得分:4)

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

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

在使用此样式进行编码时,null-safe dereference运算符也会有很大帮助,但这是另一个主题!希望Visual Studio的未来可能会改进这些有用结构的调试。

答案 3 :(得分:3)

不确定在 Visual Studio 2010 中是否可行,但是在 Visual Studio 2017 中,您可以通过在Visual Studio调试中禁用逐步执行属性设置程序的选项来实现设置:

enter image description here

答案 4 :(得分:1)

在VS2015及更高版本中进行调试时,无需任何配置即可进入(F11)。