2011-03-30 77 views
26

有没有办法逐步调试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。

回答

10

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

7

还是更好地避免大型或复杂初始化的对象初始化?

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

4

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

我发现,代表文档/记录的映射对象(如你的例子),它使得一个非常可读的声明风格,最小化代码中的“噪音”,并允许读者更清楚地看到来源和目标。这种方法也鼓励将数据映射与数据验证分离,我认为这是可取的。

以这种风格编码时,无效的解除引用操作符也会有很大帮助,但这是另一个话题!希望Visual Studio的未来发展可能会改进这些有用结构的调试。