让我们考虑一下这段代码:
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
语句一样,但关于此的官方文档在哪里?
答案 0 :(得分:6)
与以往一样,官方文档是C#规范。
重要的是,这只是一个抛出声明。它有两部分(在这种情况下):
throw
在这种情况下,表达式包括一个对象初始值设定项。在抛出任何内容之前评估整个表达式。
来自C#5规范的第8.9.5节:
带有表达式的
throw
语句会抛出通过计算表达式生成的值。
评估表达式
new MyException
("message", e)
{SomeMyExceptionProperty = "something"}
...包括将值"something"
分配给SomeMyExceptionProperty
。