我有一个List<Foo> fooList;
,其中Foo被定义为
class Foo
{
public int Importance { get; set; }
public string Name { get; set; }
}
现在我将三个对象添加到fooList
fooList.Add(new Foo { Name = "Foo1", Importance = 1 });
fooList.Add(new Foo { Name = "Foo2", Importance = 1 });
fooList.Add(new Foo { Name = "Foo3", Importance = 1 });
现在我按重要性排序
fooList.Sort((a, b) => a.Importance.CompareTo(b.Importance));
并转储列表,我得
Foo3, Foo2, Foo1
再次排序给我
Foo1, Foo2, Foo3
这两个结果都是正确的,但它们让我的用户感到困惑。 是否有办法避免诉诸?
答案 0 :(得分:2)
如果您要排序的字段的比较相等,则比较其他内容,例如对象本身:
fooList.Sort((a, b) => {
int result = a.Importance.CompareTo(b.Importance);
if (result == 0) {
result = a.CompareTo(b);
}
return result;
});
答案 1 :(得分:2)
fooList = fooList.OrderBy(x=>x.Importance).ThenBy(x=>x.Name).ToList();
它将在“重要”之后排序,然后在“名称”后排序,因此结果将相同。见下面的演示:
编辑:
在这里,您可以找到OrderBy
和Sort
之间的比较,这样您就可以考虑转到OrderBy
C# Sort and OrderBy comparison。简而言之:OrderBy
相对较快,此解决方案看起来更清晰:)