在这里无法理解:
在下面代码中的goto语句中,我得到一个编译器提示,说明冗余控制流跳转语句。这是什么意思?
我无法理解,为什么,在输出中我终于在lbl文本之前得到了什么?
谢谢,如果在任何地方出错,请纠正我的问题。
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");
}
}
答案 0 :(得分:5)
有几种方法可以避免最终阻止:
但是,普通代码不能跳过finally块。
因此,不必要的控制流语句基本上就是如果你删除了goto lbl
语句,那么控制流也会以相同的方式运行。它将始终执行finally
块,然后执行标签。由于finally
块之后没有代码,但之前没有标签,因此无论如何,没有goto
的正常控制流将会这样。