请查看此link。
现在我有一个这样的foreach:
context
我想确定foreach循环的最后一次迭代。
所以我尝试了这个:
init()
但是我有这个错误:
错误CS1061“ DataRowCollection”不包含以下内容的定义: “ Last”,没有扩展方法“ Last”接受第一个参数 可以找到类型“ DataRowCollection”(您是否缺少使用 指令还是程序集引用?)
我该怎么做?
答案 0 :(得分:2)
您只需编写
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毫秒。不用担心。