【发布时间】:2017-04-08 14:48:17
【问题描述】:
for 或 foreach 循环中有一个 try/catch/finally 块。
如果try 块中有break 语句会怎样?
finally 块会被执行吗?
【问题讨论】:
-
试试看。
标签: c# try-catch try-catch-finally
for 或 foreach 循环中有一个 try/catch/finally 块。
如果try 块中有break 语句会怎样?
finally 块会被执行吗?
【问题讨论】:
标签: c# try-catch try-catch-finally
是的,即使您有诸如break 之类的跳转语句,finally 也会阻止命中。
通常,finally 块的语句在控制离开时运行 try 语句。正常执行、break、continue、goto 或 return 语句的执行,或 try 语句中的异常传播都可能导致控制转移。
【讨论】:
会的。您可以尝试运行以下示例
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();
}
【讨论】:
是的,它会被击中。这是您可以尝试的示例代码。
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");
}
}
输出:终于到达
【讨论】:
是的,它会命中finally。 Try 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
【讨论】: