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毫秒。没什么好担心的