在探索反射器中的程序集时,我在编译器生成的类中偶然发现了一个fault关键字。
你们中有谁知道这个关键字的意思吗?
C#
private bool MoveNext()
{
bool flag;
try
{
// [...]
}
fault
{
this.Dispose();
}
return flag;
}vb.net
Private Function MoveNext() As Boolean
Dim flag As Boolean
Try
' [...]
Fault
Me.Dispose
End Try
Return flag
End Function发布于 2014-02-27 10:08:08
你们中有谁知道这个关键字的意思吗?
是。它不是有效的C#,但在IL中它等同于finally,但只有当异常被抛出时才是如此。
在C#中没有直接的相关性,这就是为什么反编译器不能将它解压缩到适当的C#。你可以用这样的方法来模仿:
bool success = false;
try
{
... stuff ...
success = true; // This has to occur on all "normal" ways of exiting the
// block, including return statements.
}
finally
{
if (!success)
{
Dispose();
}
}我在我的iterator block implementation details文章中提到了这一点,这篇文章看起来与您的特定示例相关:)
https://stackoverflow.com/questions/22065106
复制相似问题