如果有下面一段代码:
try
{
TryTag: throw new Exception("new exception");
}
catch(Exception ex)
{
goto TryTag;
}
大家猜猜会是什么结果?是进入一个死循环?还是C#不允许从catch转回try?抑或其他?开动脑筋~~
OK,time to publish the answer~答案是:根本就编译通不过!
嘿嘿,为什么嘞?C#做了限制,不允许catch转回try?表面上看起来是,但内幕其实是这样的:在try中我们加了一个标签TryTag,用来作goto的指向标,但是,TryTag也是有生存空间的,它的生存空间仅限于try块中……所以,在catch块中用goto TryTag的时候,就会编译报错,告诉你没有这么个标签~~