2013-04-26 167 views
1

我想根據方法的返回值(在實例化對象的類中調用它的Q())對對象列表進行排序。 Decaf和Regular都來自同一個班級Coffee。這兩個派生類也有不同的Q()方法的實現。它看起來像這樣:排序對象列表

static void Main(string[] args) 
{ 
     Decaf decafCoffee = null; 
     Regular regularCoffee = null; 
     List<Coffee> inventory = new List<Coffee>(); 
     if (type.StartsWith("D:")) 
     { 
      // The value of M changes based on certain criteria 
      decafCoffee = new Decaf(name, D, C, M); 
      inventory.Add(decafCoffee); 
     } 
     else if (type.StartsWith("R:")) 
     { 
      regularCoffee = new Regular(name, D, C, M); 
      inventory.Add(regularCoffee); 
     } 

     for (int j = 0; j < inventory.Count; j++) 
     { 
      Console.WriteLine("{0}", inventory[j].toString()); 
     }   
} 

我如何排序的方法Q(的價值)在爲了增加這兩類這個名單?如果需要,我可以發佈課程代碼。

回答

3

最簡單的方法可能是使用Linq的OrderBy方法:

var sorted = inventory.OrderBy(i => i.Q()); 

這將返回一個IEnumerable - 如果你想要一個List只是這樣做:

var sortedList = inventory.OrderBy(i => i.Q()).ToList(); 
+0

比IComparable快得多! – 2013-04-26 04:22:33

+0

遠不如IComparable可怕! – 2013-04-26 06:03:42