2013-03-11 100 views
0

我有一些挫折,試圖獲得排序的自定義對象類型的ArrayList。我想使用LINQ和下面的代碼是什麼,我有一個測試:排序ArrayList的對象

 foreach (classOrder co in orderList) 
     { 
      MessageBox.Show("Before: " + co.Feet); 
     } 

     //use LINQ to sort my orderList which is an ArrayList of classOrder objects 
     var sortedList = orderList.OfType<classOrder>().OrderBy(r => r.Feet); 

     foreach (classOrder co in sortedList) 
     { 
      MessageBox.Show("After: " + co.Feet); 
     } 

很明顯,因爲從底部的foreach輸出是一樣的頂部,這是不正確 ,因爲它只排序第一個數字。腳是一個字符串,但包含數字。任何幫助表示讚賞。謝謝!

+3

什麼類型是「英尺」 – 2013-03-11 21:21:24

+3

不應該是相同的(除非收集已經排序)。你能告訴我你的數據嗎? – MarcinJuraszek 2013-03-11 21:21:26

+0

我剛剛意識到,它似乎沒有工作,因爲它只考慮到第一位數字。腳是一個字符串,但包含數字。例如,如果我的腳有10,1,15的物體,它什麼都沒有做。我只是嘗試了20,1,5,它對它進行了排序,但它排序爲1,20,5 ......所以它看起來只是看第一個數字,因爲它是一個字符串。 – jbright 2013-03-11 21:31:15

回答

0

對於arrayList,也許你應該使用排序。

http://msdn.microsoft.com/en-us/library/8k6e334t.aspx

我會建議避免的ArrayList如果可能的話,或者除非你需要它爲特定目的。在這種情況下,列表或任何類型,你需要它將是可取的,因爲它讓你訪問夢幻般的擴展方法,如OrderBy

+0

'OfType'是類型過濾器+ cast – Magnus 2013-03-11 21:27:30

+0

@Magnus我回到了文檔,你是對的。我之前應該已經意識到這一點,但很可能演員陣容失敗了,因爲它無法投射到他的類型。 – 2013-03-11 21:29:29

0

你必須在你的自定義類中實現IComparable接口,然後你可以使用簡單的List.Sort ()函數。