c#列表.OrderBy根本不起作用
本文关键字:不起作用 OrderBy 列表 | 更新日期: 2023-09-27 18:25:54
我很难理解list.OrderBy
是如何工作的,我不明白我做错了什么。。。我认为这很容易,因为我在某个地方犯了一些愚蠢的错误,或者它只是以另一种方式工作,而不是我所理解的。无论如何,我想做的是根据属性对列表进行排序,我制作了一个简单的程序来说明我的意思。
class Hero
{
public int level;
public Hero(int level)
{
this.level = level;
}
static void Main(string[] args)
{
Hero hero1 = new Hero(1);
Hero hero3 = new Hero(3);
Hero hero2 = new Hero(2);
List<Hero> list = new List<Hero>();
list.Add(hero1);
list.Add(hero3);
list.Add(hero2);
list.OrderBy(x => x.level).ToList();
foreach (Hero x in list)
{
Console.WriteLine(x.level);
}
}
}
这给出了输出:
1
3
2
而我想要输出:
1
2
3
有人能向我解释为什么它不这样做,以及我如何解决它吗?我对c#很陌生。
您只需要分配OrderBy
返回的内容。
list = list.OrderBy(x => x.level).ToList();
您应该将list.OrderBy(x => x.level)
的结果返回到同一列表:
list = list.OrderBy(x => x.level).ToList();
OrderBy()
不会对您输入的IEnumerable
进行排序,而是返回一个新的IOrderedEnumerable
这将起作用:
List<Hero> ordered = list.OrderBy(x => x.level).ToList();
foreach (Hero x in ordered)
{
Console.WriteLine(x.level);
}
甚至
foreach (Hero x in list.OrderBy(x => x.level))
{
Console.WriteLine(x.level);
}
OrderBy()
返回有序列表,不将结果提供给您的列表,因此您应该将结果分配给当前列表:
list = list.OrderBy(x => x.level).ToList();
或者,如果你不想保存它,你可以在你的foreach
:中这样做
foreach (Hero x in list.OrderBy(x => x.level))
则CCD_ 9在排序之前仍然包含默认值。