0

我有一个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

这两个结果都是正确的,但它们让我的用户感到困惑。有没有办法避免求助?

4

2 回答 2

2

如果您要排序的字段的比较结果相等,则比较其他内容,例如对象本身:

fooList.Sort((a, b) => {
  int result = a.Importance.CompareTo(b.Importance);
  if (result == 0) {
    result = a.CompareTo(b);
  }
  return result;
});
于 2013-09-17T11:58:27.910 回答
2

也许使用OrderByThenBy

fooList = fooList.OrderBy(x=>x.Importance).ThenBy(x=>x.Name).ToList();

它将首先在 Importance 之后排序,然后在 Name 之后排序,因此结果将是相同的。请参阅下面的演示:

http://ideone.com/jf6Am9

编辑:

在这里您可以找到和之间的比较OrderBySort因此您可以考虑更改为OrderBy C# Sort 和 OrderBy 比较。简而言之:OrderBy速度相当快,而且这个解决方案看起来更干净:)

于 2013-09-17T11:59:16.540 回答