可能重复:
Foreach loop, determine which is the last iteration of the loop
foreach (DataRowView row in orderedTable.DefaultView)
{
if(lasttime) do-something;
}
orderedtable是一个数据表
有谁知道如何找出我们是否在最后一次foreach迭代?请记住,我确实在ordertable中有重复的
答案 0 :(得分:17)
所有案例中的正确方法是直接使用IEnumerator<T>
:
using (var enumerator = orderedTable.DefaultView.GetEnumerator())
{
if (enumerator.MoveNext())
{
bool isLast;
do
{
var current = enumerator.Current;
isLast = !enumerator.MoveNext();
//Do stuff here
} while (!isLast);
}
}
即使您的集合没有Count
属性,此方法仍然有效,即使它已经存在,如果Count
属性很慢,此方法也会更有效。
答案 1 :(得分:7)
foreach
构造不知道这样的事情,因为它同样适用于无界列表。它无法知道最后一个项目是什么。
您也可以迭代手动方式,但是:
for (int i = 0; i < orderedTable.DefaultView.Count; i++) {
DataRowView row = orderedTable.DefaultView[i];
if (i == orderedTable.DefaulView.Count - 1) {
// dosomething
}
}
答案 2 :(得分:3)
我认为没有人发布的替代方法。如果您不提前知道计数,这很有效。
DataRowView lastRow;
foreach (DataRowView row in orderedTable.DefaultView)
{
// Do something...
lastRow = row;
}
if (lastRow != null)
{
// Do something with last row
}
答案 3 :(得分:2)
如果您想在最后一项上有不同的行为,则必须使用常规for循环。
for (int i = 0; i < orderedTable.DefaultView.Count; i++)
{
//do stuff
if (i == orderedTable.DefaultView.Count - 1)
{
//do additional special stuff
}
}
值得注意的是,“另一个Skeet”具有支持Last属性的“智能可枚举”的实现。请参阅此处的文章:http://msmvps.com/blogs/jon_skeet/archive/2007/07/27/smart-enumerations.aspx
有了这个你可以写这样的东西(我可能会弄错了,我自己没试过):
foreach (SmartEnumerable<DataRowView> item in new SmartEnumerable<DataRowView>(orderedTable.DefaultView))
{
DataRowView row = item.Value;
if(item.IsLast)
{
///do special stuff
}
}
答案 4 :(得分:0)
如果您担心跟踪迭代,为什么不使用for
代替foreach
?然后您可以简单地执行以下操作:
for(int i = 0; i<orderedTable.DefaultView.Count-1;i++)
{
if(i==orderedTable.DefaultView.Count-1)
{
// Last Row
}
}
答案 5 :(得分:0)
而不是使用foreach获取IEnumerator。如果MoveNext返回null,则前一个是最后一个。
当然也会工作。
答案 6 :(得分:0)
您可能会执行以下操作:
foreach (DataRowView row in orderedTable.DefaultView)
{
if(row == orderedTable.DefaultView.Last()) do-something;
}
但效率很低。
答案 7 :(得分:0)
您发布的代码与:
相同if (orderedTable.DefaultView.Rows.Count > 0)
do-something;
如果这不符合你的要求,你必须解释lastTime
的作用。
答案 8 :(得分:0)
如果我理解你的问题,这会有帮助吗?
int lastrow = 0;
foreach (DataRow row in table.Rows) // Loop over the rows.
{
lastrow++;
// Do Something
if (lastrow == (table.Rows.Count - 1))
{
// Do something else
}
}