C#使用IComparable时的排序错误

时间:2013-04-20 19:40:34

标签: c# sorting arraylist icomparable

我正在尝试使用IComparable对数组列表进行排序......

请注意,我无法使用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);

1 个答案:

答案 0 :(得分: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; }