无法反转foreach中的List <t>

时间:2018-06-03 17:28:15

标签: c#

我有一个List<T>我需要撤消,所以我尝试了:

foreach (Round round in Competition.Rounds.Reverse())
{

}

返回以下错误:

the foreach statement can not work with variables of type 'void' 
   because 'void' does not contain a public instance definition for 'GetEnumerator' 

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

需要考虑两种Reverse方法:

编译器只在其耗尽的实例方法之后才查找扩展方法 - 所以在这种情况下,它绑定到List<T>.Reverse()方法......这就是它的原因所在没有编译。 (你不能迭代void。)

如果要修改列表,只需单独调用该方法:

Competition.Rounds.Reverse();
foreach (Round round in Competition.Rounds)
{
    ...
}

如果您不想想要修改列表,最简单的方法可能就是直接致电Enumerable.Reverse<T>

foreach (Round round in Enumerable.Reverse(Competition.Rounds))
{
    ...
}

或者你可以有效地失去&#34;编译时类型List<T>,例如像这样:

// Important: don't change the type of rounds to List<Round>
IEnumerable<Round> rounds = Competition.Rounds;
foreach (Round round in rounds.Reverse())
{
    ...
}

答案 1 :(得分:2)

反向返回void,而不是:

Competition.Rounds.Reverse();
foreach (Round round in Competition.Rounds){...}

或者如果您不想修改Competition.Rounds,请使用Enumerable.Reverse(...)

foreach (Round round in Enumerable.Reverse(Competition.Rounds)){...}

或效率较低的替代方案:

foreach (String round in Competition.Rounds.ToArray().Reverse()){...}