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

使用对象初始化器抛出新的异常

况明贤
2023-03-14

让我们考虑一下这段代码

try
{
    return new ClassA.GetStuff();
}
catch (Exception e)
{
    throw new MyException
        ("message", e)
        {SomeMyExceptionProperty = "something"};
}

抛出MyException时,对象初始化是如何完成的?这样地:

MyException myException = new MyException("message", e);
myException.SomeMyExceptionProperty = "something";
throw myException;

或者像这样(所以某些MyExceptionProperty没有初始化):

MyException myException = new MyException("message", e);
throw myException;
myException.SomeMyExceptionProperty = "something"; //unreachable code

我认为使用了第一种行为,比如return语句,但是关于这一点的官方文档在哪里?

共有1个答案

袁宜民
2023-03-14

与以往一样,官方文档是C#规范。

重要的部分是,这只是一个抛出语句。它有两个部分(在这种情况下):

  • 关键字抛出

在本例中,表达式包含一个对象初始值设定项。在抛出任何内容之前对整个表达式求值。

根据C#5规范第8.9.5节:

带有表达式的throw语句抛出通过计算表达式生成的值。

计算表达式

new MyException
    ("message", e)
    {SomeMyExceptionProperty = "something"}

... 包括将值“something”分配给SomeMyExceptionProperty

 类似资料:
  • 我在使用Mockito进行单元测试初始化对象时遇到了一些困难 这是我的测试代码 要测试的代码 RecTangleService、CircleService和SquareService用注释我尝试了很多选项,最终得出结论。我没有得到我错在哪里。我试着在网上搜索了很多地方,但找不到任何帮助。

  • 我正在使用selenium WebDriverWait对象动态控制代码中对象检测的超时。但此对象在WebDriverWait对象中指定的时间跨度用完之前超时。例如,我用10秒的超时时间跨度初始化了对象,但对象在大约2秒内超时。 这是我的密码 我在调试模式下运行它,我可以清楚地看到drv。FindElement(By.XPath(".//*[@类='TopTitle']")) 在2-3秒内 异常和堆

  • 问题内容: 我在用Java工作。 我通常会这样设置一些对象: 问题是:在此示例中是否等于,按原样我可以假定对未初始化的对象进行空检查将是准确的? 问题答案: 正确,未显式初始化的引用类型的静态成员和实例成员都由Java 设置为。相同的规则适用于数组成员。 根据Java语言规范的第4.12.5节: 变量的初始值 程序中的每个变量在使用值之前都必须具有一个值: 每个类变量,实例变量或数组组件在创建时均

  • 我预计Spring会通过将属性“property.key”设置为“property_value”来初始化StorageConfiguration对象。 但是,我得到以下异常 org.springframework.beans.factory.beanCreationException:创建类路径资源[applicationContext.xml]中定义的名为“storage”的bean时出错:在设

  • 前面一节的 Fruit 类有两个实变量,分别表述水果的类型和状态.直到为这个类写了一个定制的inspect方法,我们方才了解它不会对一个缺乏属性的水果做出合理的解释.幸运的是,Ruby提供了一种允许实变量总是被初始化的方法. initalize方法 当Ruby创建一个新对象时,它总是会寻找一个名为 initialize 的方法并执行它.因此,我们可以简单通过一个initialize方法向实变量中加