我有以下代码示例:
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
list.Add(6);
list.Add(7);
list.OrderByDescending(n=>n).Reverse();
但是当我使用它时:
list.OrderByDescending(n=>n).Reverse();
我没有得到想要的结果。
如果不是上述陈述,我会使用这个:
list.Reverse();
我得到了想要的结果。
任何想法为什么我没有得到想要的结果使用第一个声明?
我相信我在理解扩展时遗漏了一些东西。
提前谢谢。
答案 0 :(得分:6)
list.Reverse()
方法就地反转列表,因此您的原始list
已更改。
.OrderByDescending()
扩展程序会生成一个新列表(或者更确切地说是IEnumerable<T>
)并保留原始list
。
修改强>
要获得两个排序顺序的两个列表:
List<int> upList = list.OrderBy(n => n).ToList();
List<int> downList = list.OrderByDescending(n => n).ToList();
答案 1 :(得分:2)
修改:问题似乎是您认为Enumerable
扩展名会更改原始收藏集。不,他们没有。实际上,他们会返回一些你需要新变量的新东西:
IEnumerable<int> ordered = list.OrderByDescending(n => n);
foreach(int i in ordered)
Console.WriteLine(i);
OrderByDescending
命令下降(最高的第一个),这是你显然想要的。所以我不明白为什么你事后扭转它。
所以这应该给你预期的结果:
var ordered = list.OrderByDescending(n=> n);
这会返回“任意”顺序:
list.Reverse()
因为它只是颠倒了你添加int
的顺序。如果您以有序的方式添加它们,则根本不需要订购。
一般情况下:如果您想要订购序列,请使用OrderBy
或OrderByDescending
;如果您想要反转不一定订单的序列,请使用Reverse
(至少令人困惑) )。