我正在尝试使用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);
答案 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; }