如何在C#中有效地摆脱双循环?

Mup*_*pet 4 c# loops

这是我目前用于打破双循环并继续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);
}
Run Code Online (Sandbox Code Playgroud)

整个"定义一个临时的布尔变量以检查跳过"对我来说似乎非常hacky.在像Go这样的语言中,我可以使用标签来突破循环,甚至可以使内部循环成为clojure的一部分.在C#中执行此操作的最佳方法是什么?

我一直在做上面这个例子的时间最长,并觉得必须有一个更好的方法 - 在这一点上几乎感到羞愧.

谢谢

AAA*_*ddd 5

您可以使用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();
}
Run Code Online (Sandbox Code Playgroud)

其他资源