Zwo*_*Rmi 0 c# exception object-initializers
我们考虑一下这段代码:
try
{
return new ClassA.GetStuff();
}
catch (Exception e)
{
throw new MyException
("message", e)
{SomeMyExceptionProperty = "something"};
}
Run Code Online (Sandbox Code Playgroud)
投掷时MyException,对象初始化是如何完成的?像这样 :
MyException myException = new MyException("message", e);
myException.SomeMyExceptionProperty = "something";
throw myException;
Run Code Online (Sandbox Code Playgroud)
或者像这样(所以SomeMyExceptionProperty没有初始化):
MyException myException = new MyException("message", e);
throw myException;
myException.SomeMyExceptionProperty = "something"; //unreachable code
Run Code Online (Sandbox Code Playgroud)
我认为使用了第一个行为,就像return声明一样,但官方文档在哪里?
与以往一样,官方文档是C#规范.
重要的是,这只是一个抛出声明.它有两个部分(在这种情况下):
throw在这种情况下,表达式包括对象初始值设定项.将整个表达式任何抛出之前进行评估.
来自C#5规范的第8.9.5节:
throw带有表达式的语句会抛出通过计算表达式生成的值.
评估表达
new MyException
("message", e)
{SomeMyExceptionProperty = "something"}
Run Code Online (Sandbox Code Playgroud)
...包括将值赋值"something"给SomeMyExceptionProperty.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |