无法识别在C#中使用对象初始值设定项时引发异常的属性

问题描述:

在下面的两个示例代码中,我试图通过使用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_为空。 –

对象初始应该用于简单的初始化。如果你有一个引发异常的代码,你会遇到你所描述的问题。

我知道这不是一个真正的答案,但你不知道哪个属性失败。 在可空的情况下,您可以使用类似这样的内容,在其中指定默认值。

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

我的问题是所有的,有没有任何调试技术来识别属性?那么使用Object Initializers的优点是什么,这对我没有任何影响? – JEMI

+2

你可以参考这个答案的好处:http://*.com/questions/12842371/is-there-any-benefit-of-using-an-object-initializer – Roland

+0

我想知道为什么Visual Studio不能提供抛出异常的属性。 – JEMI