我有一个问题,无法反转以下 List
:
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
我总是遇到这个错误:
类型void不可枚举
问题出在哪里,如何解决?
我有一个问题,无法反转以下 List
:
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
我总是遇到这个错误:
类型void不可枚举
问题出在哪里,如何解决?
List<T>.Reverse
不返回任何内容 - 它会直接在原列表上进行翻转。Reverse
,它可以返回一个反向的序列但不会改变现有的列表,您可以使用:foreach (IEnumerable<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
或者更明确地说:
foreach (List<Foo> row in Items)
{
// We want to use the LINQ to Objects non-invasive
// Reverse method, not List<T>.Reverse
foreach (Foo item in Enumerable.Reverse(row))
{
...
}
}
List<T>.Reverse()
会进行原地反转。这意味着它会改变您的原始列表。
因此,您可以像这样使用它:
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
...
}
}
如果您不想更改原始列表,那么您将需要显式调用Enumerable.Reverse
:
foreach (List<Foo> row in Items)
{
foreach (Foo item in Enumerable.Reverse(row))
{
...
}
}
List<T>.Reverse()
是一种就地反转的方法,它不返回新列表。它会改变你的原始列表。
反转整个
List<T>
中元素的顺序。
在第一个foreach语句中,您需要使用row.Reverse();
。例如:
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
//
}
}
反转序列中元素的顺序。
foreach (Foo item in Enumerable.Reverse(row))
{
//
}
这里是同样的 演示,使用了 Enumerable.Reverse<T>
方法。
foreach (List<Foo> row in Items)
{
row.Reverse()
foreach (Foo item in row)
{
...
}
}
Reverse
可使列表中的项目更改顺序,但不会返回新的已颠倒顺序的列表。
List<T>.Reverse
方法不会返回任何东西!
foreach (IEnumerable<Foo> row in Items)
{
row.Reverse();
foreach(Foo item in row)
{
}
}
List.Reverse()是一个没有返回值的方法。
你可以尝试将你的循环改为以下形式。
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
...
}
}