有没有办法在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。
应保留对象初始化器以进行简单的对象初始化。如果您的对象构造函数具有可能失败的代码(例如抛出异常),请不要使用它。更好地依赖于对象构造模式,根据您的需要,可能是工厂方法,抽象工厂等...这也确保您的类的所有用户都无法构建处于无效状态的实例(例如,忘记初始化一个成员,或者他们用不正确的值初始化相关成员等...)
或者最好避免使用对象初始化程序进行大型或复杂的初始化?
是的,它很难维护(和调试)。
对象初始值设定项的调试支持在Visual Studio 2010中不是很好。出于这个原因,避免将对象初始值设定项用于大型或复杂初始化可能是实用的,但我不考虑使用大型或复杂(例如嵌套)对象初始化一个糟糕的设计选择本身。
我发现,为了映射表示文档/记录的对象(比如你的例子),它会产生一种非常易读的声明式样式,最大限度地减少代码中的“噪音”,并让读者更清楚地看到源和目标之间的关系。这种方法还鼓励将数据映射与数据验证分开,我认为这是可取的。
在使用这种风格进行编码时,一个空安全的解除引用运算符也会有很多帮助,但这是另一个主题!希望Visual Studio的未来可能会改进这些有用结构的调试。
Step Into(F11)在VS2015及以上版本中进行调试时无需任何配置。