我有一个问题,我无法扭转以下情况List:
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我总是得到错误:
类型void不可枚举
问题是什么以及如何解决?
Jon*_*eet 34
List<T>.Reverse不会返回任何内容 - 它会将列表反转到位.
如果您想使用LINQ版本Reverse返回相反的序列但不改变现有列表,您可以使用:
foreach (IEnumerable<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
或许更清楚:
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))
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*rth 16
List<T>.Reverse()确实的就地反向.这意味着它会更改您的原始列表.
所以,你会像这样使用它:
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想更改原始列表,则必须Enumerable.Reverse明确调用:
foreach (List<Foo> row in Items)
{
foreach (Foo item in Enumerable.Reverse(row))
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
无法Enumerable.Reverse在扩展方法语法中使用的原因是:扩展方法不隐藏/覆盖实例方法,并且List<T>恰好已经有了Reverse方法.
List<T>.Reverse()是就地反转,它不会返回新的 list。它会改变你原来的清单。
反转整个 中元素的顺序
List<T>。
您需要row.Reverse();在第一个 foreach 语句中使用。喜欢;
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
//
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个演示。
如果您不想更改原始列表,可以使用Enumerable.Reverse方法代替。
反转序列中元素的顺序。
foreach (Foo item in Enumerable.Reverse(row))
{
//
}
Run Code Online (Sandbox Code Playgroud)
这里是使用方法相同的DEMOEnumerable.Reverse<T>。