1

我尝试了几个小时使用 IComparable 对 ArrayList 进行排序......

请注意,我不能使用 IComparer 来执行此操作。

这是代码:

class Pays : IComparable<Pays>
{
    private string nomPays;

    public string NomPays{get{return nomPays;}set{nomPays = value;}}

    public int CompareTo(object x)
    {
        Pays myX = (Pays)x;
        return string.Compare(this.nomPays, x.nomPays);
    }
}

class TestPays
{
    public static ArrayList LireRemplirPays(){ //...blabla
        return uneListe;
    }
    static void Main(string[] args){
        ArrayList paysList = LireRemplirPays();
        paysList.Sort();          
    }
}

错误粘贴:System.ArgumentException: 至少一个对象必须实现 IComparable System.Collections.Comparer.Compare(Object a, Object b)......

我能做些什么 ?谢谢阅读

编辑 :

所以我的第一个错误是:

class Pays : IComparable<Pays>

代替

class Pays : IComparable

第二个错误:

return nomPays.CompareTo(myX.nomPays);
4

1 回答 1

5

您应该使用通用列表而不是ArrayList

class TestPays
{
    public static List<Pays> LireRemplirPays() { //...blabla
        return uneListe; // Cast here if necessary
    }
    static void Main(string[] args) {
        List<Pays> paysList = LireRemplirPays();
        paysList.Sort();          
    }
}

ArrayList不是通用的,可以包含任何类型的对象,并且object不实现IComparable.

此外,如果NomPays实际上不进行任何检查,您可以使用速记而不必显式声明支持字段:

public string Nom { get; set; }
于 2013-04-20T19:42:38.613 回答