Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在X个项目数后中断foreach循环_C#_Foreach - Fatal编程技术网

C#在X个项目数后中断foreach循环

C#在X个项目数后中断foreach循环,c#,foreach,C#,Foreach,在我的foreach循环中,我想在50个项目之后停止,当我到达第50个项目时,你如何打破这个foreach循环 谢谢 foreach (ListViewItem lvi in listView.Items) 这应该行得通 int i = 1; foreach (ListViewItem lvi in listView.Items) { ... if(++i == 50) break; } 或者使用LINQ foreach( ListViewItem lvi in listVi

在我的foreach循环中,我想在50个项目之后停止,当我到达第50个项目时,你如何打破这个foreach循环

谢谢

foreach (ListViewItem lvi in listView.Items)
这应该行得通

int i = 1;
foreach (ListViewItem lvi in listView.Items) {
    ...
    if(++i == 50) break;
}
或者使用LINQ

foreach( ListViewItem lvi in listView.Items.Cast<ListViewItem>().Take(50))
{
    //do stuff
}
foreach(listView.Items.Cast()中的ListViewItem lvi.Take(50)) { //做事 } 或者只使用一个常规的for循环(正如@sgriffinusa和@ericj所建议的那样)

for(int i=0;i<50&&i
或者使用常规for循环代替foreach。for循环稍微快一点(尽管除了时间非常关键的代码外,您不会注意到差异)。

为什么不使用常规for循环呢

for(int i = 0; i < 50 && i < listView.Items.Count; i++)
{
    ListViewItem lvi = listView.Items[i];
}
for(int i=0;i<50&&i

更新以解决Ruben和Pragmatrix指出的错误。

只需使用break,如下所示:

int cont = 0;
foreach (ListViewItem lvi in listView.Items) {
   if(cont==50) { //if listViewItem reach 50 break out.
      break; 
   }
   cont++;   //increment cont.
}

ListViewItemCollection没有定义Take()的实现。上面的示例无法编译。您可能可以执行类似于ListView.Items.Cast()的操作。Take(50),但我认为简单的for循环将更具性能。ListViewItemCollection没有实现IEnumerable,不能使用LINQEnumerable。Cast修复了这一问题:Cast)(IEnumerable)方法通过提供必要的类型信息,允许在非泛型集合上调用标准查询运算符。例如,ArrayList不实现IEnumerable),但通过对ArrayList对象调用Cast)(IEnumerable),可以使用标准查询运算符查询序列@杰德,我不是不尊重哈米什,但我认真地认为你接受了错误的答案。如果您预先知道一个循环要执行多少次迭代,那么有一个特定的语言构造,这就是for循环。从foreach跳出并不是一件坏事,所以哈米什的回答没有错……但作为一个典型的经验法则,如果你能避免跳跃(这就是所谓的跳出),你应该这样做。我不是说写复杂的代码来避免中断,中断有时是最好的选择,但在这种情况下,最确定的是简单的for循环。@Tim Jarvis,我不认为你不尊重我。你所说的(这是对这个问题的有效回答)是@Jade M问了一个错误的问题。真正的问题不是“我如何打破foreach循环?”而是“如果我想迭代已知的最大迭代次数,我应该使用什么迭代代码构造?”@Hamish,嗯,是的,你是对的,简而言之。
for(int i = 0; i < 50 && i < listView.Items.Count; i++)
{
    ListViewItem lvi = listView.Items[i];
}
for(int i = 0; i < 50 && i < listView.Items.Count; i++)
{
    ListViewItem lvi = listView.Items[i];
}
int cont = 0;
foreach (ListViewItem lvi in listView.Items) {
   if(cont==50) { //if listViewItem reach 50 break out.
      break; 
   }
   cont++;   //increment cont.
}