当前位置: 首页 > 知识库问答 >
问题:

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

养昊天
2023-03-14

在下面的两个示例代码中,我试图使用C#normal方法和对象初始值设定项实例化一个名为Test的类。

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
};

在上面的代码中,当我使用对象初始化器时,我无法理解哪个属性被抛出异常。在这里我不能逐行调试。如果我初始化了很多属性,很难识别。

这里是我的问题:如何从异常窗口识别哪个属性显示异常?现在,内部异常为null。

共有1个答案

仇正平
2023-03-14

对象初始值设定项应用于简单初始化。当您有一个抛出异常的代码时,您将遇到您所描述的问题。

我知道这不是一个真正的答案,但你不会知道哪个属性失败了。如果是空值,您可以使用这样的方法,在其中指定默认值。

var test = new Test
        {
            Date = nullDate.GetValueOrDefault(new DateTime()),
            Name = "String",
            AnotherDate = notNullDate.Value
        };
 类似资料:
  • 本文向大家介绍详解C#中使用对象或集合的初始值设定项初始化的操作,包括了详解C#中使用对象或集合的初始值设定项初始化的操作的使用技巧和注意事项,需要的朋友参考一下 使用对象初始值设定项初始化对象 可以使用对象初始值设定项以声明方式初始化类型对象,而无需显式调用类型的构造函数。 下面的示例演示如何将对象初始值设定项用于命名对象。编译器通过先访问默认实例构造函数然后处理成员初始化处理对象初始值设定项。

  • 使用C#对象初始化器有什么好处吗? 在C语言中,没有引用,所有内容都封装在一个对象中,因此在创建对象后使用它们而不是初始化成员是有意义的。 在C#中使用它们的情况是什么? 如何:使用对象初始值设定项初始化对象(C#编程指南)

  • 问题内容: 我快速覆盖了其中的两个必需变量,这些变量通过使用引用进行初始化,因为这些变量用于实现协议,并且需要引用以使用其属性 现在的问题是,它给了我预期的错误 Swift的编译器执行四项有用的安全检查,以确保两阶段初始化完成且没有错误 安全检查1指定的初始化程序在将其委托给超类初始化程序之前,必须确保初始化其类引入的所有属性。 摘录自:苹果公司“ The Swift Programming La

  • Ivor Horton在开始的Visual C 2013中提到了C语言中的“初始化列表”: "对于const或引用类型的类成员,您无法选择如何初始化它们。唯一的方法是在构造函数中使用成员初始化器列表。构造函数主体内的赋值将不起作用。" 我的Visual Studio 2012 express没有编译初始值设定项列表,所以一开始我很困惑,然后我意识到它不受支持。 我的问题是人们如何在初始化器列表之前

  • 我有一个场景,我需要从未知来源加载类并实例化它们以进行模拟——我不需要运行代码,但方法和属性必须在结果实例中。我还需要类的名称保持不变,以便将其实例分配给其他已加载类的该类型的字段。有时类实例化由于而失败,使类处于无效状态,无法恢复。我不知道哪个类会事先失败。 考虑一下这一点: 以下是我想到的: 使用ByteBuddy-fails with NoClassDefFoundError创建失败类的子类

  • 当方法运行时,我希望抛出一个异常(在测试时)。我能做的事情很少: 存根(mock.someMethod(“某些参数”)).ToThrow(new RuntimeException()); 当(mock.someMethod(“某些参数”)).thenThrow(new RuntimeException()) 放弃..... 通常我会创建一个spy对象来调用spied方法。使用stubbing我可以