尝试/捕捉/终于,当我在我的捕获中返回时,如何最终防止?

时间:2011-05-09 07:01:31

标签: c#

我有这个代码,我想阻止最终执行

        try
        {
            throw new Exception("Try Error!!!");
        }
        catch(Exception exp)
        {
            Console.WriteLine(exp.Message);
            Console.ReadLine();
            if(exp.Message == "Try Error!!!")
                return;
        }
        finally
        {
            Console.WriteLine("Finally...");
            Console.ReadLine();
        }

但是返回不起作用。

8 个答案:

答案 0 :(得分:12)

最终不会仅在以下三个条件下运行:

  1. trycatch块调用System.exit()。
  2. try块内有一个无限循环。
  3. 执行try块时系统崩溃或断电。
  4. 对于所有其他条件....最后总是执行...有一个布尔变量来控制最终代码的执行是一个聪明的方法...去吧......

答案 1 :(得分:8)

这是最终的意义 - 它总是运行。

试试这个:

bool runfinally = true;
try {
  throw new Exception("test");
} catch {
  runfinally = false;
} finally {
  if(runfinally) {
     // do stuff.
  }
}

答案 2 :(得分:3)

你为什么要这样做?

最后就是这样它总是运行并完成一些必须完成的完成工作,如果你只想在try运行时执行代码然后在try语句中写入,否则如果它只是在它失败那么在抓住一个。必须在finally部分中编写必须在两种情况下进行调整的代码。

答案 3 :(得分:2)

唯一的方法是设置finally代码测试的标志变量,例如:

bool handled = false;
try
{
    throw new Exception("Try Error!!!");
}
catch(Exception exp)
{
    Console.WriteLine(exp.Message);
    Console.ReadLine();
    if (exp.Message == "Try Error!!!")
    {
        handled = true;
        return; // This isn't really necessary unless you have code below it you're not showing
    }
}
finally
{
    if (!handled)
    {
        Console.WriteLine("Finally...");
        Console.ReadLine();
    }
}

...但我真的考虑重新审视你的逻辑,所以你不需要这样做。 finally整点是无论try块中发生什么,finally代码都会运行,无论您是否早期从代码返回try阻止,或发生异常,或者从catch块内返回。

答案 4 :(得分:2)

最后一点是,无论try / catch块如何执行,它都会运行。一种解决方法可能是这样的:

    bool runfinallycode = true;
    try
    {
        throw new Exception("Try Error!!!");
    }
    catch(Exception exp)
    {
        Console.WriteLine(exp.Message);
        Console.ReadLine();
        if(exp.Message == "Try Error!!!")
            runfinallycode = false;
    }
    finally
    {
        if( runfinallycode )
        {
          Console.WriteLine("Finally...");
          Console.ReadLine();
        }
    }

答案 5 :(得分:1)

无论try catch块发生什么,最终都会被执行。这意味着你可以在退出函数之前释放资源。

答案 6 :(得分:1)

System.exit()可用于避免执行finally块Finally Block。 但是如果您的条件是执行不应该受到阻碍,那么请重新构建问题。

答案 7 :(得分:-1)

但是你的回复是在一个if子句中,所以它不会一直有效。尝试将它放在if in catch

之外