无法理解这里的一些事情:
在下面代码中的 goto 语句中,我得到一个编译器提示,提示冗余控制流跳转语句。什么意思?
我无法理解,为什么在 lbl 文本之前我得到了 finally 输出?
谢谢,如果有任何错误,请纠正我的问题。
class Program
{
static void Main(string[] args)
{
try
{
Nullable<int> i = null;
//i = 5;
Console.WriteLine("i:" + i.HasValue);
Console.WriteLine("i:" + i.Value);
}
catch (System.InvalidOperationException e)
{
Console.WriteLine("Exception:" + e);
goto lbl; // A
}
finally
{
Console.WriteLine("finally");
}
lbl:
Console.WriteLine("hi lbl");
}
}
最佳答案
有几种方法可以避免 finally 阻塞:
- 终止进程
- 杀死电脑
但是,普通代码不能跳过 finally block 。
因此,不必要的控制流语句基本上就是如果您删除了 goto lbl
语句,控制流无论如何都会以相同的方式进行。它将始终执行 finally
block ,然后 then 转到标签。由于在 finally
block 之后但在标签 之前没有代码,因此没有 goto
的正常控制流无论如何都会这样进行。
关于c# - 冗余控制流跳转语句及跳转语句的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37607780/