goto在三四十年前的Basic时代是不可替代的,因为那时候连循环也没有,只能使用判断语句和goto结合实现循环。到了后来goto语句是不主张使用的了,甚至很多语言中取消了goto语句。多年不用,已经想不起来用它。最近写代码,需要跳出多重循环,而使用break只能跳出一重循环,终于发现在这里goto有用武之地,示例代码如下:
foreach(var state in atomicStates)
{
var slist = new List<StateConfigure>();
slist.Add(state);
slist.AddRange(getProperAncestors(state, null));
foreach(var s in slist)
{
foreach(var t in s.Transitions)
{
if(!string.IsNullOrEmpty(t.Event) && nameMatch(t.Event, internalEvent.Name) && conditionMatch(t))
{
enabledTransitions.Add(t);
goto loop;
}
}
}
loop:;
}
在这里使用goto语句可以使代码更容易理解,结果也更优雅。
网友评论