使用foreach循环

时间:2010-03-17 11:49:35

标签: c# .net winforms for-loop foreach

我打破 for 循环的代码而不使用 break ,就像我在下面给出的循环一样。当 i 为1或2时或3或任何其他但如果条件为真则循环将终止,因为如果条件为真, i 将为5。因此需要中断。因为我不想使用休息。我在这里做过这样的事情。它有效。

int myCondition=0;
bool flag=false;
for(int i=0;i<5;i++)
{
   if(myCondition==0)
   {
       flag=true;
   }
   if(flag)
       i=5;
}

但是现在我想使用 foreach循环并在这个循环中当某些条件为真时我想打破 foreach循环代码。所以我该怎么做在不使用中断的情况下打破 foreach循环代码?就像在上面的for循环中一样,当条件为真时,我将 i 初始化为5.在 foreach循环中,可以采取任何措施来避免中断

7 个答案:

答案 0 :(得分:10)

你应该使用语言中的内容。没有必要避免break - 只需使用它。换句话说,“我不想使用break”这不是一个足够好的理由:如果你认为你有一个非常好的理由不使用它那么你应该解释一下这个原因。不要假装没有完全合理的功能,并提出复杂的方案来避免它们。

答案 1 :(得分:8)

不要这样做。

你在for循环中操纵'i'已经有问题了。试图在foreach循环中弄乱迭代器将是彻头彻尾的脏。如果它完全编译。

我会用break或as:

写下你的例子
bool myCondition=false;
for(int i=0;i<5 && !myCondition;i++)
{
   ....
}

在foreach循环中,当您在整个序列完成之前完成时,只需致电break

答案 2 :(得分:4)

这可能会让我失败...但你应该使用break关键字。

失败:

foreach(var foo in bar)
{
  if(condition)
  {
    //perform normal loop code
    //set condition if required.
  }
  //otherwise do nothing - the loop will iterate all the way to the end without 
  //doing anything.
}

你可以更有表现力并在循环中使用if(condition){ /*blah*/}else { continue; } - 但无论哪种方式它都做同样的事情。

除了:

之外,你不能做太多其他事情
  • 使用break
  • 抛出异常

答案 3 :(得分:2)

通常,您在此处描述的“模式”是代码气味。在for循环中更改索引变量不是一个好主意。它可能导致难以理解,难以维护的代码,尤其是在循环变大的情况下。

话虽如此,为什么您不想使用break关键字。它就是为了这个目的,无论它有什么缺点(在你看来)仍然是一个比你在这里描述的更好的解决方案。

最后,我认为没有办法以合理的方式使用foreach循环做同样的事情。

答案 4 :(得分:1)

在for(;;)循环中不使用break是一个严重的风格错误。但你会逃脱它。但是当你使用foreach时, 使用break关键字。

请注意此blog post的标题。

答案 5 :(得分:1)

嗯,这就是为什么有这个命令“休息”。我没理由你不应该使用它。

答案 6 :(得分:0)

您的代码绝对应该是:

bool myCondition = false;

for(int i=0;i<5;i++)
{
   // do stuff
   if(myCondition)
      break;
}

您不仅使用该语言提供的命令(即工具),而且保持代码的可读性和可维护性。 break命令是该语言的基础。

试图想出一些不使用break的理由就像在计算器上做数学 - 字面意思是,将计算器翻过来,得到一个银色油漆标记,并做一些数学。你不使用你面前的工具就会使自己陷入瘫痪。