如何在C#中停止finally块的执行

时间:2011-08-08 11:35:26

标签: asp.net-mvc

我已经创建了一个try块。我会再次尝试阻止try阻止它finally阻止。我关闭了外部尝试阻止。跟随finally阻止。我不喜欢我想执行finally块,因为我写了Environment.Exit(0)。是否还有其他任何方法可以阻止execution.return 0;(即java)中的块。请告诉我。

public static int Main()
        {
            try
            {
                Console.WriteLine("First try block");

                try
                {
                    Console.WriteLine("Second try block");
                    //exit(0);
                    Environment.Exit(0);
                    //return 0;
                }

                finally
                {
                    Console.WriteLine("Finally block of inner try");
                }
            }

            finally
            {
                Console.WriteLine("Finally block of second try");
            }

6 个答案:

答案 0 :(得分:2)

来自MSDN -

  

当控制离开try语句时,执行finally块的语句,是否由于正常执行,执行break,continue,goto或return语句或传播的传递而发生控制转移。 try语句中的异常。

答案 1 :(得分:2)

您可以使用Environment.FailFast()立即退出应用程序,同时跳过最终和终结器。

http://msdn.microsoft.com/en-us/library/ms131100.aspx

答案 2 :(得分:0)

可以使用一个try块和几个catch块。如果一种类型的异常需要某些操作,您可以将它们输入到该块中,并将最后一个块留空。

答案 3 :(得分:0)

您不能 - finally总是执行,除非由于某种原因JVM在它到达之前退出。 Link from MSDN

无论如何,我不太清楚你为什么要这样做。听起来你可能需要稍微改变你的设计。

答案 4 :(得分:0)

替代:

使用布尔值来确定调用finally块中的哪些代码。

    public static int Main()
    {
        bool complete = false;
        try
        {
            Console.WriteLine("First try block");

            try
            {
                Console.WriteLine("Second try block");
                //exit(0);
                //Environment.Exit(0);
                return 0;
            }

            finally
            {
                Console.WriteLine("Finally block of inner try");
            }
        }

        finally
        {
            if (complete)
            {
                Console.WriteLine("Finally block of second try");
            }
        }
    }

确保在某处设置complete变量。

答案 5 :(得分:-3)

    static void Main(string[] args)
    {
        try
        {
            int a = 10/0;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {

            while (true)
            {
                Console.WriteLine("Statement 1");
                break;
                Console.WriteLine("Statement 2");
            }
        }
        Console.ReadLine();
    }