我很难理解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#很新。
答案 0 :(得分:18)
你只是需要指定OrderBy
返回的内容。
list = list.OrderBy(x => x.level).ToList();
答案 1 :(得分:1)
您应该将list.OrderBy(x => x.level)
的结果返回到同一列表:
list = list.OrderBy(x => x.level).ToList();
答案 2 :(得分:1)
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);
}
答案 3 :(得分:0)
OrderBy()
会返回有序列表,并且不会将结果显示在列表中,因此您应该将结果分配给当前列表:
list = list.OrderBy(x => x.level).ToList();
或者如果您不想保存,可以在foreach
:
foreach (Hero x in list.OrderBy(x => x.level))
然后list
在订购之前仍然包含默认值。