改变Foreach命令?

soo*_*ise 10 c# foreach

无论如何都要通过列表从结尾到开头而不是从开始到结束(最好不重新排序列表).

Bry*_*tts 36

using System.Linq;

foreach(var item in source.Reverse())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果你专门处理一个,还有一步List<T>.该类定义了自己的Reverse方法,其签名与Enumerable.Reverse扩展方法不同.在这种情况下,您需要将变量引用"提升"为IEnumerable<T>:

using System.Linq;

foreach(var item in list.AsEnumerable().Reverse())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将创建另一个列表并使用两倍的内存,因此对于大型列表,您可能需要使用不同的策略。但总的来说,这将是解决这个问题的最佳方法。 (3认同)

Jim*_*Jim 8

你可以使用一个常规的for循环,从最后开始并减少,而不是从顶部开始并递增.

就像是:

for(int i=foo.lenth; i != 0; i--)
{
do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 部分真实。仅当集合可索引(实现 IList 或提供索引器成员)时,才能使用索引。foreach 适用于任何实现 IEnumerable 的对象,而 IEnumerable 不提供索引。 (2认同)
  • 从技术上讲,它不是 foreach,但我喜欢这个解决方案,因为它不涉及创建另一个内存结构。不幸的是,如果枚举没有一致的索引器来递减,它将无法工作。 (2认同)