首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试块中的‘`Fault`’关键字

尝试块中的‘`Fault`’关键字
EN

Stack Overflow用户
提问于 2014-02-27 10:04:25
回答 1查看 2.9K关注 0票数 20

在探索反射器中的程序集时,我在编译器生成的类中偶然发现了一个fault关键字。

你们中有谁知道这个关键字的意思吗?

C#

代码语言:javascript
复制
private bool MoveNext()
{
    bool flag;
    try
    {
        // [...]
    }
    fault
    {
        this.Dispose();
    }
    return flag;
}

vb.net

代码语言:javascript
复制
Private Function MoveNext() As Boolean 
    Dim flag As Boolean
    Try 
        ' [...]
    Fault
        Me.Dispose
    End Try
    Return flag
End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 10:08:08

你们中有谁知道这个关键字的意思吗?

是。它不是有效的C#,但在IL中它等同于finally,但只有当异常被抛出时才是如此。

在C#中没有直接的相关性,这就是为什么反编译器不能将它解压缩到适当的C#。你可以用这样的方法来模仿:

代码语言:javascript
复制
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文章中提到了这一点,这篇文章看起来与您的特定示例相关:)

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22065106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档