C# Foreach循环,确定循环-DataRow的最后一次迭代
请看一下这个。C# Foreach循环,确定循环-DataRow的最后一次迭代,c#,foreach,C#,Foreach,请看一下这个。 现在我有一个类似这样的例子: //DataRow last = dsRequests.Tables["Requests"].Rows.Last(); foreach (DataRow drRequests in dsRequests.Tables["Requests"].Rows) { } 我想确定foreach循环的最后一次迭代。 所以我试了一下: DataRow last = dsRequests.Tables["Requests"].Rows.Last(); 但我有一
现在我有一个类似这样的例子:
//DataRow last = dsRequests.Tables["Requests"].Rows.Last();
foreach (DataRow drRequests in dsRequests.Tables["Requests"].Rows)
{
}
我想确定foreach循环的最后一次迭代。所以我试了一下:
DataRow last = dsRequests.Tables["Requests"].Rows.Last();
但我有一个错误:
错误CS1061“DataRowCollection”不包含的定义
“Last”和无扩展方法“Last”接受的第一个参数
找不到类型“DataRowCollection”(是否缺少使用
指令或组件引用?)
我该怎么做呢?你只需写
DataRow last = dsRequests.Tables["Requests"].AsEnumerable().LastOrDefault();
if(last != null)
.....
强制DataTable可枚举,然后可以使用LastOrDefault()。请注意,我使用的是LastOrDefault,因为如果表为空,则Last()将获得一个异常
另一种方法是通过老式的Rows集合索引
DataRow last = null;
int idx = dsRequests.Tables["Requests"].Rows.Count;
if(idx > 0) last = dsRequests.Tables["Requests"].Rows[idx -1];
if(last != null)
....
在本例中,您必须在获得计数后测试行数
我还应该补充的是,最后一个使用索引访问最后一行的示例的性能更高。然而,我的测试表明,在100000个循环上,差异仅为40毫秒。没什么好担心的。你可以简单地写
DataRow last = dsRequests.Tables["Requests"].AsEnumerable().LastOrDefault();
if(last != null)
.....
强制DataTable可枚举,然后可以使用LastOrDefault()。请注意,我使用的是LastOrDefault,因为如果表为空,则Last()将获得一个异常
另一种方法是通过老式的Rows集合索引
DataRow last = null;
int idx = dsRequests.Tables["Requests"].Rows.Count;
if(idx > 0) last = dsRequests.Tables["Requests"].Rows[idx -1];
if(last != null)
....
在本例中,您必须在获得计数后测试行数
我还应该补充的是,最后一个使用索引访问最后一行的示例的性能更高。然而,我的测试表明,在100000个循环上,差异仅为40毫秒。没什么好担心的