如何通过其中一个对象属性订购对象的ArrayList?
请不要建议使用List<T>
的任何技巧。对于我当前的软件,使用List<T>
是不可能的。
答案 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 );
}
}