2013-03-11 106 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 ()函数。