【问题标题】:Try/Catch within loop in C# [closed]在 C# 中的循环内尝试/捕获 [关闭]
【发布时间】:2017-04-08 14:48:17
【问题描述】:

forforeach 循环中有一个 try/catch/finally 块。

如果try 块中有break 语句会怎样?

finally 块会被执行吗?

【问题讨论】:

  • 试试看。

标签: c# try-catch try-catch-finally


【解决方案1】:

是的,即使您有诸如break 之类的跳转语句,finally 也会阻止命中。

通常,finally 块的语句在控制离开时运行 try 语句。正常执行、break、continue、goto 或 return 语句的执行,或 try 语句中的异常传播都可能导致控制转移。

来自https://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx

【讨论】:

    【解决方案2】:

    会的。您可以尝试运行以下示例

        static void Main(string[] args)
        {
    
            for (int i = 0; i < 5; i++)
            {
                try
                {
                    Console.WriteLine(i);
                    if (i == 3)
                        break;
                }
                catch (Exception e)
                {
    
                }
                finally
                {
                    Console.WriteLine("finally");
                }
            }
    
            Console.ReadKey();
        }
    

    【讨论】:

      【解决方案3】:

      是的,它会被击中。这是您可以尝试的示例代码。

              var intList = new List<int>{5};
      
              foreach(var intItem in intList)
              {
                  try
                  {
                    if(intItem == 5)
                      break;
                  }
                  catch(Exception e)
                  {
                      Console.WriteLine("Catch reached");
                  }
                  finally
                  {
                      Console.WriteLine("Finally reached");
                  }
              }
      

      输出:终于到达

      【讨论】:

        【解决方案4】:

        是的,它会命中finallyTry Me. 下面将确认我的回答:

        using System;
        
        public class Program
        {
            public static void Main()
            {
                for (int i = 0; i < 100; i++)
                {
                    try
                    {
                        if (i == 10)
                        {
                            break;
                        }
        
                        Console.WriteLine(i);
                    }
                    catch
                    {
                        Console.WriteLine("Catch");
                    }
                    finally
                    {
                        Console.WriteLine("finally");
                    }
                }
            }
        }
        

        输出:

        0
        finally
        1
        finally
        2
        finally
        3
        finally
        4
        finally
        5
        finally
        6
        finally
        7
        finally
        8
        finally
        9
        finally
        finally
        

        【讨论】:

          猜你喜欢
          • 2022-08-13
          • 2013-12-15
          • 2014-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多