C# 如何限制foreach循环n次运行?

C# 如何限制foreach循环n次运行?,c#,datatable,C#,Datatable,假设我有以下循环: foreach (DataRow dr in table.rows) { ... } 如何防止其运行次数超过n次?您可以尝试 using System.Linq; ... ... ... foreach (DataRow dr in rows.Cast<DataRow>().Take(50)) { } 使用System.Linq; ... ... ... foreach(DataRow dr in rows.Cast().Take(50)){} 请注

假设我有以下循环:

foreach (DataRow dr in table.rows)
{
    ...
}
如何防止其运行次数超过n次?

您可以尝试

using System.Linq;
...
...
...
foreach (DataRow dr in rows.Cast<DataRow>().Take(50)) { }
使用System.Linq;
...
...
...
foreach(DataRow dr in rows.Cast().Take(50)){}

请注意,您必须调用
Cast()
才能将
DataRowCollection
转换为
IEnumerable
,这将允许您使用
Take()
扩展方法。

选项1:拥有运行计数器:

var i = 0;
foreach (DataRow dr in rows)
{
    i++;
    if(i >= 50) break;
}
选项2:使用for循环

for(int i = 0; i <= 50; i++) {
    // This might actually crash if there are fewer than 50 rows
    var row = rows[i]; 
}

for(inti=0;i理想情况下,修改原始查询以仅返回50行。获取超出您想要使用的内容没有意义


如果这不是一个选项,其他人也提供了很好的替代方案。

如果
实际上只是来自,那么简单的
获取
答案将不起作用,因为只实现了非泛型
IEnumerable
接口,而LINQ需要泛型接口。您将需要以下内容:

// Uses DataTableExtensions.AsEnumerable
foreach (DataRow dr in table.AsEnumerable().Take(50))

//使用Enumerable.Cast
foreach(DataRow dr in rows.Cast().Take(50))
试试这个:

foreach (DataRow dr in table.Rows.Cast<DataRow>().Take(50))
{
    //your logic
}
foreach(table.Rows.Cast()中的DataRow dr.Take(50)) { //你的逻辑 }
使用
.Cast().Take(50)
Linq方法很好,但这对于
for
循环来说确实是一个简单的问题:

for( int i = 0; i < Math.Min(50, rows.Count); ++i ) 
{ 
    var row = rows[i];
}
for(int i=0;i
你试过这段代码吗?
DataRowCollection
没有可以直接使用的
Take
方法。你让我对纠正拼写错误犹豫不决;)第二个例子末尾的加号是故意的吗?@JamesJohnson:没有,这次只是一个拼写错误:)对于一个新程序员,即使你最终选择了
Take(50)
方法中的一种,也一定要查看循环中显式计数器的答案。@AnthonyPegram:对于正在学习的人来说,这是一个很好的建议。
for( int i = 0; i < Math.Min(50, rows.Count); ++i ) 
{ 
    var row = rows[i];
}