繁体   English   中英

使用对象初始化程序引发新异常

[英]Throw new exception using object initializer

让我们考虑下面的代码:

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;

或这样(这样SomeMyExceptionProperty不会初始化):

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

我认为使用了第一个行为,例如用于return语句,但是关于此的官方文档在哪里?

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

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

  • 关键字throw
  • 确定要抛出异常的表达式

在这种情况下,表达式包括一个对象初始化器。 整个表达式在抛出任何东西之前先求值。

根据C#5规范的8.9.5节:

带有表达式的throw语句将抛出通过评估表达式产生的值。

评估表达

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

...包括将值"something"分配给SomeMyExceptionProperty

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM