如何排序数组列表

时间:2013-12-25 11:55:00

标签: c#

有2个列表框可以交换项目。每个列表项都有文本和值属性 例如:“分支”,1; “叶子”,23,...等 将listbox2中的项添加到listbox1之后,我想对listbox1进行排序。

lb1和lb2是列表框。

protected void btnRemove_Click()
{
  if(lb2.Items.count > 0)
   {
     if(lb2.selectedindex >=0)
      {
        ListItem li = lb2.selecteditem;
        lb1.items.add(li);

        //sort
         List<ListItem> al = new List<ListItem>();
         foreach(listitem l in lb1.items)
          {
           al.Add(l);
          }
        lb1.items.clear();
        al.sort();
        lb1.Datasource=al;
        lb1.databind();
     }
   }
}

al.sort();它出错 - “无法比较数组中的2个元素”。 我该怎么纠正这个。

4 个答案:

答案 0 :(得分:1)

现有代码的问题在于,您要在ListItem中添加ArrayList并对ArrayList应包含IComparer的对象进行排序,如{{3}中所述}}
您可以添加自定义IComparer这样的内容,

public class MyListItemComparer : IComparer
{
    int IComparer.Compare(Object x, Object y)
    {
        //ListItem item1 = (ListItem)x;
        //ListItem item2 = (ListItem)y;
        return 1;//Your logic to compare and sort;
    }
}

然后您可以将sort方法称为

        ArrayList al = new ArrayList();
        ..... //Your other code
        IComparer myComparer = new MyListItemComparer();
        al.Sort(myComparer);

答案 1 :(得分:1)

本文应该对您有所帮助:C# ArrayList Examples

另外,请查看documentation for ArrayList

答案 2 :(得分:1)

尝试此操作来排序您的al数组:

al.OrderBy(a => a);

答案 3 :(得分:0)

请确保您的数组列表包含正确的数据且不为空。 al.sort();应该对整数,字符串和其他数据类型的arraylist工作,如果它们继承IComparable,则需要编写自己的比较器。