13

是否可以有一个foreach语句以相反的顺序遍历 Collections 对象?

如果不是foreach声明,还有其他方法吗?

4

5 回答 5

27

您可以向后使用正常for循环,如下所示:

for (int i = collection.Count - 1; i >= 0 ; i--) {
    var current = collection[i];
    //Do things
}

您还可以使用 LINQ:

foreach(var current in collection.Reverse()) {
    //Do things
}

但是,正常for循环可能会快一点。

于 2010-06-16T18:36:59.983 回答
7

你可以在集合上调用Reverse() 。

foreach(var item in collection.Reverse()) { ... }
于 2010-06-16T18:38:42.410 回答
5

如果您使用的是 3.5,看起来 LINQ 中有一个 Reverse() 方法不会以相反的顺序遍历,而是会反转整个列表,那么您可以执行 foreach。

或者你可以使用一个简单的 for 语句:

for(int i = list.Count -1; i >= 0; --i)
{
   x = list[i];
}
于 2010-06-16T18:37:04.047 回答
4

或者,如果集合是 IEnumerable 并因此没有随机访问,请使用 System.Linq 的 IEnumerable.Reverse() 方法并照常应用 forsearch。

using System.Linq;

foreach (var c in collection.Reverse()) {
}
于 2010-06-16T18:45:07.000 回答
2
        List<string> items = new List<string> 
        { 
            "item 1", 
            "item 2",
            "item 3", 
            "item 4", 
        };
        lines.AsEnumerable().Reverse()
                            .Do(a => Console.WriteLine(a), ex => Console.WriteLine(ex.Message), () => Console.WriteLine("Completed"))
                            .Run();           

.NET 3.5/4.0 的反应式扩展

于 2010-06-17T05:14:07.683 回答