如何对Foreach循环中的迭代元素进行切分我需要遍历整个用户列表,但是我需要一次抓取20个。foreach(varstudentinClass.Students.Take(20)){Console.WriteLine("你属于Group"+groupNumber);群号++;这样,前20个将属于第1组,第二个20个将属于第2组,依此类推。采取正确的语法?我相信Take将花费20来完成。谢谢!你可以这样做:inti=0;foreach(vargroupinginClass.Students.GroupBy(s=>++i/20))Console.WriteLine("YoubelongtoGroup"+grouping.Key.ToString());对于类似的问题,我曾经做了一个扩展方法:publicstaticIEnumerable>ToChunks(thisIEnumerableenumerable,intchunkSize){intitemsReturned=0;varlist=enumerable.ToList();//防止多次执行IEnumerable。intcount=list.Count;while(itemsReturned请注意,最后一个块可能小于指定的块大小。编辑第一个版本使用Skip()/Take(),但正如Chris指出的那样,GetRange快得多。您可以使用Select和匿名类型将组号投影到原始列表中的每个项目,如下所示:varassigned=Class.Students.Select((item,index)=>new{Student=item,GroupNumber=index/20+1});然后你可以这样使用它:foreach(variteminassigned){Console.WriteLine("Student="+item.Student.Name);Console.WriteLine("你属于群组"+item.GroupNumber.ToString());或者如果你想选择一个特定的组。foreach(varstudentinassigned.Where(x=>x.GroupNumber==5)){Console.WriteLine("Name="+student.Name);或者,如果你想对它们进行分组以执行聚合.Age).Average().ToString());现在,如果您只想批量生产物品而不关心批号信息,您可以创建这个简单的扩展方法。publicstaticIEnumerable>Batch(thisIEnumerabletarget,intsize){varassigned=target.Select((item,index)=>new{Value=item,BatchNumber=index/size});foreach(vargroupinassigned.GroupBy(x=>x.BatchNumber)){yieldreturngroup.Select(x=>x.Value);您可以像这样使用新的扩展方法。以上就是C#学习教程的全部内容:如何在foreach循环中分段共享迭代元素。如果对你有用,需要进一步了解C#学习教程,希望你多多关注—foreach(varbatchinClass.Students.Batch(20)){foreach(varstudentinbatch){Console.WriteLine("Student="+student.Name);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理会员删除。如需转载请注明出处:
