我有一個問題,我不能扭轉以下List
:我怎樣才能扭轉的foreach列表?
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
我總是得到錯誤:
Type void is not enumerable
請告訴我問題,以及如何解決呢?
我有一個問題,我不能扭轉以下List
:我怎樣才能扭轉的foreach列表?
foreach (List<Foo> row in Items)
{
foreach (Foo item in row.Reverse())
{
...
}
}
我總是得到錯誤:
Type void is not enumerable
請告訴我問題,以及如何解決呢?
List<T>.Reverse
不會返回任何東西 - 它會顛倒目錄。
如果你想使用它返回一個反向序列LINQ version of 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))
{
...
}
}
foreach (List<Foo> row in Items)
{
row.Reverse()
foreach (Foo item in row)
{
...
}
}
在列表中
Reverse
更改順序 - 它不會與項目的顛倒順序返回新的列表。
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))
{
...
}
}
原因無法在擴展方法語法中使用Enumerable.Reverse
:擴展方法不會隱藏/覆蓋實例方法,並且List<T>
恰好已經有一個Reverse
方法。
+1用於強調原始列表* *改變*,因此*在程序的不同部分保持反轉*。 – 2013-02-26 10:18:36
List<T>.Reverse
不返回任何東西!
foreach (IEnumerable<Foo> row in Items)
{
row.Reverse();
foreach(Foo item in row)
{
}
}
List<T>.Reverse()
是就地相反,它不返回新的列表。它會更改您的單數列表。
Reverses the order of the elements in the entire
List<T>
.
您需要在您的第一個foreach語句中使用row.Reverse();
。喜歡;
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
//
}
}
這裏是一個DEMO。
如果你不想改變你的orininal列表,您可以使用Enumerable.Reverse方法代替。
Inverts the order of the elements in a sequence.
foreach (Foo item in Enumerable.Reverse(row))
{
//
}
這裏是相同DEMO使用Enumerable.Reverse<T>
方法。
List.Reverse()是一個具有void簽名的方法。
你可以改變你的循環如下。
foreach (List<Foo> row in Items)
{
row.Reverse();
foreach (Foo item in row)
{
...
}
}
根據這個帖子,似乎他們在最近版本的.NET已經改變反向方法的簽名:公共靜態的IEnumerable反向(這IEnumerable的源); –
hbulens
2016-11-23 11:33:22