反过来说

时间:2011-07-03 17:28:38

标签: c# loops foreach

是否有可行的方法让foreach从最后到开始迭代整个集合?

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
    foreach (int i in fibarray)
    {
        System.Console.WriteLine(i);
    }

如何与foreach反向显示?

7 个答案:

答案 0 :(得分:4)

您可以使用Reverse()

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
foreach (int i in fibarray.Reverse())
{
    System.Console.WriteLine(i);
}

一般来说,foreach必须支持任何IEnumerable,它只支持集合中项目的前向枚举,作为Reverse()的替代,您可以编写自己的优化实现,适用于{ {1}}提供索引器。

答案 1 :(得分:4)

using System.Linq;

foreach (int i in fibArray.Reverse())

但正常的for循环会更有效:

for( int index = fibArray.Length - 1; index >= 0; --index ) {
    int i = fibArray[index];
    ...
}

答案 2 :(得分:2)

foreach (int i in fibarray.Reverse<int>())
{
    System.Console.WriteLine(i);
}

答案 3 :(得分:0)

不。请改用for,或在迭代前将集合修改为所需的顺序。

答案 4 :(得分:0)

Enumerable.Reverse()

foreach (int i in fibarray.Reverse)
    System.Console.Writeline(i);

答案 5 :(得分:0)

我不认为默认情况下这是可能的。您需要使用具有该功能的迭代器创建自己的类:

C# .NET Iterator Example : Reverse Iteration

答案 6 :(得分:0)

简而言之,没有。你无法改变foreach的行为。如果你想在不返回新数组的情况下这样做(比如调用Reverse),那么使用for循环。

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };
for (int i = fibarray.Length - 1; i > -1; i--) {
    Console.WriteLine(i);
}