【问题标题】:Foreach loop, determine which is the last iteration of the loop - DataRowForeach 循环,确定哪个是循环的最后一次迭代 - DataRow
【发布时间】:2023-04-06 14:30:01
【问题描述】:

请看一下这个link
现在我有一个这样的 foreach :

//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”(您是否缺少使用 指令还是程序集引用?)

我该怎么做?

【问题讨论】:

    标签: c# foreach


    【解决方案1】:

    你可以简单地写

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

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 2019-02-02
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 2011-01-17
      • 2023-03-11
      相关资源
      最近更新 更多