![](/img/trans.png)
[英]Cannot Identify the property which throw exception when using Object initializer in C#
[英]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.