如何反转显示列表内容的顺序?

时间:2011-09-24 02:41:04

标签: c# list

假设我有一个整数列表。

var myList = new List<int>();
1, 2, 3, 4, 5, ..., 10

是否有任何功能允许我以相反的顺序显示它们,即

10, 9, 8, ..., 1

修改


public List<Location> SetHierarchyOfLocation(Location location)
    {
        var list = new List<Location>(7);
        var juridiction = location.Juridiction;
        if (juridiction > 0)
        {
            while (juridiction > 0)
            {
                var loc = repository.GetLocationByID(juridiction);
                list.Add(loc);
                juridiction = loc.Juridiction;
            }
        }
        return list;
    }

由于列表按位置包含位置,因此我希望能够按相反的顺序显示它。

现在,当我写回来 list.Reversed()时,我收到了错误。

感谢您的帮助

3 个答案:

答案 0 :(得分:16)

var reversed = myList.Reverse()应该可以解决问题。

编辑:

更正 - 正如OP发现的那样,List.Reverse就地工作,与Enumerable.Reverse不同。因此,答案只是myList.Reverse(); - 您不会将其分配给新变量。

答案 1 :(得分:6)

  

是否有任何功能允许我以相反的顺序显示它们,即

这取决于你是想要在适当的位置反转它们,还是仅仅产生一系列与基础序列相反的值而不改变列表。

如果是前者,只需使用List<T>.Reverse

// myList is List<int>
myList.Reverse();
Console.WriteLine(String.Join(", ", myList));

如果是后者,则键为Enumerable.Reverse

// myList is List<int>

Console.WriteLine(
    String.Join(
        ", ", 
       myList.AsEnumerable().Reverse()
    )
);

美丽的单行。请确保您拥有using System.Linq;

答案 2 :(得分:-1)

要反向执行列表<Location>中的foreach循环,您应该使用:

foreach (Location item in myList.Reverse().ToList())
{
   // do something ...
}

.Reverse()是就地反转;它没有返回新的列表。 .Reverse()之后的.ToList()可以解决问题。