2011-03-30 42 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的未來發展可能會改進這些有用結構的調試。