如何从嵌套方法"继续"ForEach循环?

Den*_*ail 13 c# c#-4.0

我有一个ForEach循环来处理一个相当大的联系人列表.我不是在这个主循环中进行一堆处理,而是调用一个方法,该方法又调用一个方法等.方法调用其他类中的其他方法,也许是其他命名空间.

如果检测到条件并且我想转到下一个联系人,如何从当前方法中断?我在主ForEach循环的几个级别的方法.

通常,您可以使用continueForEach中的关键字跳转到集合中的下一个元素.continue在这种情况下不是一个选项.当我输入时continue,它会以红色加下划线并带有"未解决的消息"注释.

那么,我该怎么办?

Eri*_*ert 22

你在这里走的是一条糟糕的道路; 退一步重新考虑你的设计.

一般来说,使用试图影响其呼叫者控制流的方法是一个非常糟糕的主意.方法是调用者的服务方,而不是主服务方.该方法不会决定调用者接下来会做什么; 这不是它的业务.相反,一种方法:

  • 执行计算并返回结果,或
  • 修改一些状态,然后
  • 如果操作无法成功完成,则抛出异常

有高级控制流样式,其中callees与调用者一起工作以确定"接下来会发生什么" - 例如,Continuation Passing Style.但你不应该去那里.他们很难理解.


Bra*_*ace 6

您的支持方法应该返回一个值,该值在main方法的for循环中检查,然后continue从那里返回,如果值是指示的值.

使用异常是另一种选择,但它们通常被认为较慢 - 我不确定C#.当以这种方式使用时,它们通常也被认为是不良形式.异常情况下应该抛出异常,而不是流量控制的正常部分.可以说有可能以这种方式使用它们,例如Web框架Play!,但你可能不在其中一个.


Iva*_*čić 4

你可能有一个标志......类似的东西,bool conditionDetected当检测到一个条件时,你只需将其设置为 true 并且if (conditionDetected) return;从方法中获取,直到你到达下if( conditionDetected) continue一个的顶部......然后你再次将其设置为false 并继续...您会收到错误,因为当您移动到另一个方法时您不在 foreach 循环内