一千萬個為什麽

搜索

如何基於LINQ中的類型對集合進行排序

我有這樣的集合,

Class Base{}
Class A : Base {}
Class B : Base {}

List collection = new List();
collection.Add(new A());
collection.Add(new B());
collection.Add(new A());
collection.Add(new A());
collection.Add(new B());

現在我想根據類型(A/B)對集合進行排序。我怎麽能這樣做?請幫幫我。

最佳答案

您可以使用類型信息本身:

collection.Sort( (a,b) => 
  {
      bool aType = a.GetType() == typeof(A);
      bool bType = b.GetType() == typeof(A);
      return aType.CompareTo(bType);
  });

這適用於您指定的兩種類型,但不會超出它們。它允許您明確指定順序(即:如果您想要“A”之前的“B”元素,您可以使用此技術使其工作)。

如果您需要支持多種類型,並且不需要提前指定排序,您可以執行以下操作:

collection.Sort( (a,b) => a.GetType().FullName.CompareTo(b.GetType().FullName) );

這將處理任意數量的類型(即:C和D子類型),並按其完整類型名稱對它們進行排序。

轉載註明原文: 如何基於LINQ中的類型對集合進行排序