如何通过其中一个对象属性订购对象的ArrayList?

时间:2014-11-20 15:17:29

标签: c# .net arraylist

如何通过其中一个对象属性订购对象的ArrayList?

请不要建议使用List<T>的任何技巧。对于我当前的软件,使用List<T>是不可能的。

3 个答案:

答案 0 :(得分:1)

您需要为您的实体实施IComparer,例如:

public class MyClassComparer : IComparer<MyClass>
{
    public int Compare(MyClass _x, MyClass _y)
    {
        return _x.MyProp.CompareTo(_y.MyProp);
    }
}

并将其传递给ArrayList.Sort,如:

myArrayList.Sort(new MyClassComparer());

答案 1 :(得分:0)

您必须实施自己的比较器MSDN link

答案 2 :(得分:0)

这是使用LinqPad编写的一个可以帮助您的示例。 松散地基于MSDN示例 您只需要使用自己的类而不是此处使用的示例

void Main()
{
    ArrayList al = new ArrayList();
    al.Add(new Person() {Name="Steve", Age=53});
    al.Add(new Person() {Name="Thomas", Age=30});

    al.Sort(new PersonComparer());

    foreach(Person p in al)
        Console.WriteLine(p.Name + " " + p.Age);

}

class Person
{
    public string Name;
    public int Age;
}
class PersonComparer : IComparer
{

    int IComparer.Compare( Object x, Object y )  
    {
        if (x == null)
            return (y == null) ? 0 : 1;

        if (y == null)
            return -1;

        Person p1 = x as Person;
        Person p2 = y as Person;

        // Uncomment this to sort by Name 
        // return( (new CaseInsensitiveComparer()).Compare( p1.Name, p2.Name) );

        return( p1.Age - p2.Age );
    }
}