0

我有一个通用列表。我正在使用Foreach循环列表并执行我的操作。我有一个场景,如果列表的最后一条记录是迭代的,我需要添加条件。

我打算做什么?

我可以获得列表计数和减量并识别最后一条记录

foreach()
{
Count--;   //Where Row is the List Count
if (Count >= 1)
{   
}
}

但是,我可以在没有 count 或 if 的情况下实现这个更简单的替代方法是什么?

4

3 回答 3

0

您可以获得对最后一项的引用并在 foreach 中检查。我会通过使用 LINQ Last 方法来做到这一点。像这样的东西:

var lastitem = list.Last();
foreach (var item in list) {
    if (item == lastItem)
        // Do your specific check here.
    else
        // rest of the loop
}

请记住,这段代码有以下限制:

  1. 它仅适用于引用类型,不适用于值类型。
  2. 同一个对象只能在列表中出现一次。

我提供了这个答案,因为问题中使用了 foreach。正如对问题的评论之一所述,我本人会使用基于索引的循环并反转列表,以便我可以首先处理“特定”情况。

于 2013-05-16T07:05:09.583 回答
0

你可以避免if循环中的条件,但你必须使用一个for语句,它只会让你知道最后一个元素是否被迭代。如果您需要取消最后一个元素的迭代,这将不相关:

for(int i = 0; i < list.Count; i++)
{
    // your operations
}

if (i == list.Count) // means you iterated your last element
于 2013-05-16T07:06:08.147 回答
0

枚举器无法知道它们正在迭代哪个元素。因此,您将需要使用另一种涉及条件语句的机制。

但是,由于您使用的List<T>是支持索引的最简单的选项是:

int finalIndex = list.Count - 1;

for (int i = 0; i < list.Count; i++)
{
    if (i == finalIndex)
    {
        // Perform required action
    }
}
于 2013-05-16T13:50:30.763 回答