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#很陌生。

c#列表.OrderBy根本不起作用

只需要分配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在排序之前仍然包含默认值。