作者:H丨uAn9-伟安 | 来源:互联网 | 2022-11-23 13:46
这是我目前用于打破双循环并继续DoStuff()的方法:
foreach (var enemyUnit in nearbyEnemyUnits) {
var skip = false;
foreach (var ownUnit in ownUnits) {
if (ownUnit.EngagedTargetTag == enemyUnit.tag) {
skip = true;
break;
}
}
if (skip) continue;
DoStuff(enemyUnit);
}
整个"定义一个临时的布尔变量以检查跳过"对我来说似乎非常hacky.在像Go这样的语言中,我可以使用标签来突破循环,甚至可以使内部循环成为clojure的一部分.在C#中执行此操作的最佳方法是什么?
我一直在做上面这个例子的时间最长,并觉得必须有一个更好的方法 - 在这一点上几乎感到羞愧.
谢谢
1> AAAbbbCCCddd..:
您可以使用goto,匿名方法,将其包装在方法中,或者使用本地函数C#7
static void Main(string[] args)
{
void localMethod()
{
foreach (var enemyUnit in nearbyEnemyUnits)
foreach (var ownUnit in ownUnits)
if (ownUnit.EngagedTargetTag == enemyUnit.tag)
return;
}
localMethod();
}
其他资源
转到(C#参考)
匿名方法(C#编程指南)
本地功能(C#编程指南)