按ArrayList的属性对象命令ArrayList?

时间:2010-05-24 21:15:15

标签: c#

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

3 个答案:

答案 0 :(得分:3)

ArrayList有点弃用。我们现在使用通用的List<T>类。*

您可以对列表&lt; T&gt;进行排序就地使用List<T>.Sort

List<Person> persons = // ...

persons.Sort((a, b) => string.Compare(a.Name, b.Name));

或创建新的列表&lt; T&gt;使用LINQ的Enumerable.OrderBy

List<Person> persons = // ...

List<Person> sortedPersons = persons.OrderBy(p => p.Name).ToList();

(*除非您坚持使用.NET Framework 1.1)

答案 1 :(得分:2)

正如dtb解释的那样,你应该使用通用List<T>而不是无类型ArrayList,除非你使用的是pre 2.0版本的.NET。

如果你真的想用ArrayList来做,有两种方法:

  • 如果集合的元素实现IComparable,只需使用不带参数的Sort方法:

    arrayList.Sort();
    
  • 否则,您需要通过实现IComparer界面来创建自定义比较器:

    public class PersonComparer : IComparer
    {
        public int Compare(object a, object b)
        {
            Person pa = a as Person;
            Person pb = b as Person;
            if (pa == pb) return 0;
            if (pa == null) return -1;
            if (pb == null) return 1;
            return string.Compare(pa.Name, pb.Name);
        }
    }
    
    ...
    
    arrayList.Sort(new PersonComparer());
    

答案 2 :(得分:0)

每当您想要对数组进行排序时,您需要将其与特定元素进行比较。 假设您有一个名为Client的数组List,Client有clientID 现在你要对它进行排序。你的代码应该是

Client.Sort(a, b) => string.Compare(a.clientID.ToString(), b.clientID.ToString()));