2016-11-23 78 views
2

在下面的兩個示例代碼中,我試圖通過使用C#常規方法和對象初始值設定項實例化名爲的測試類無法識別在C#中使用對象初始值設定項時引發異常的屬性

DateTime? nullDate = null; //this value will come from somewhere else 
DateTime? notNullDate = DateTime.Now; 
var test = new Test(); 
test.Date = nullDate.Value; //exception will throw here 
test.Name = "String"; 
test.AnotherDate = notNullDate.Value; 

在上面的示例代碼中,我可以清楚地瞭解哪些屬性在調試時顯示異常。

DateTime? nullDate = null; //this value will come from somewhere else 
DateTime? notNullDate = DateTime.Now; 
var test = new Test 
{ 
    Date = nullDate.Value, 
    Name = "String", 
    AnotherDate = notNullDate.Value 
}; 

在上面的代碼中,當我使用對象初始值設定項時,我無法理解哪個屬性被拋出異常。在這裏,我無法逐行調試。如果我初始化了很多屬性,則很難識別。

這是我的問題:如何識別哪個屬性顯示異常窗口的異常?現在內部的異常是空的。

enter image description here

+2

你不能 - 這就是爲什麼你應該在調用初始化程序之前做空檢查等。異常不會給你任何關於_what_的上下文是空 –

+0

@DStanley我可以檢查空引用,但我的問題是沒有其他方法來確定哪個屬性拋出異常? – JEMI

+0

否 - 該例外不會導致_what_爲空。 –

回答

0

對象初始應該用於簡單的初始化。如果你有一個引發異常的代碼,你會遇到你所描述的問題。

我知道這不是一個真正的答案,但你不知道哪個屬性失敗。 在可空的情況下,您可以使用類似這樣的內容,在其中指定默認值。

var test = new Test 
     { 
      Date = nullDate.GetValueOrDefault(new DateTime()), 
      Name = "String", 
      AnotherDate = notNullDate.Value 
     }; 
+0

我的問題是所有的,有沒有任何調試技術來識別屬性?那麼使用Object Initializers的優點是什麼,這對我沒有任何影響? – JEMI

+2

你可以參考這個答案的好處:http://stackoverflow.com/questions/12842371/is-there-any-benefit-of-using-an-object-initializer – Roland

+0

我想知道爲什麼Visual Studio不能提供拋出異常的屬性。 – JEMI

相關問題