C# 按ArrayList包含的属性对象排序ArrayList?

C# 按ArrayList包含的属性对象排序ArrayList?,c#,C#,如何按对象属性之一对对象的ArrayList进行排序?ArrayList有点不受欢迎。我们现在使用泛型类* 您可以使用以下方法对列表进行就地排序: 列出人员=/。。。 persons.Sort((a,b)=>string.Compare(a.Name,b.Name)); 或者使用LINQ创建一个新列表: 列出人员=/。。。 List sortedPersons=persons.OrderBy(p=>p.Name.ToList(); (*除非您坚持使用.NET Framework 1.1)Ar

如何按对象属性之一对对象的ArrayList进行排序?

ArrayList有点不受欢迎。我们现在使用泛型类*

您可以使用以下方法对列表进行就地排序:

列出人员=/。。。
persons.Sort((a,b)=>string.Compare(a.Name,b.Name));
或者使用LINQ创建一个新列表:

列出人员=/。。。
List sortedPersons=persons.OrderBy(p=>p.Name.ToList();

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

ArrayList有些不推荐使用。我们现在使用泛型类*

您可以使用以下方法对列表进行就地排序:

列出人员=/。。。
persons.Sort((a,b)=>string.Compare(a.Name,b.Name));
或者使用LINQ创建一个新列表:

列出人员=/。。。
List sortedPersons=persons.OrderBy(p=>p.Name.ToList();

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

正如dtb所解释的那样,除非您使用的是.NET的2.0以前版本,否则您可能应该使用通用
列表而不是非类型
数组列表

如果您确实想使用
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());
    

正如dtb所解释的,除非您使用的是.NET的2.0之前版本,否则您可能应该使用通用的
列表,而不是非类型的
数组列表

如果您确实想使用
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());
    

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

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

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

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

嘿,我试过你的第一个建议,它告诉我需要使用委托类型我已经仔细检查过了,它在这里工作。您使用的框架版本是什么?你能发布你的代码吗?你得到的确切错误信息是什么?他说的是ArrayList。兰博达斯要求他跟上3次更新和一大堆阅读。失败的原因,真的。@Tom:确保您使用的是Visual Studio 2008或2010。这在2005年是行不通的@汉斯:他很可能来自爪哇..嘿,我试过你的第一个建议,它告诉我需要使用委托类型?:我已经仔细检查过了,它在这里工作。您使用的框架版本是什么?你能发布你的代码吗?你得到的确切错误信息是什么?他说的是ArrayList。兰博达斯要求他跟上3次更新和一大堆阅读。失败的原因,真的。@Tom:确保您使用的是Visual Studio 2008或2010。这在2005年是行不通的@汉斯:他很可能来自爪哇。。