实现IComparable我将IComparable归类为相似对象的排序。我的问题是为什么要将其类型转换为int32?数组的Sort()似乎将数组中的每种类型转换为我用于比较的类型。可比较的:公共类人:IComparable{protectedintage;公共int年龄{得到;放;}publicintCompareTo(objectobj){if(objisPerson){varperson=(Person)obj;返回age.CompareTo(person.age);}else{thrownewArgumentException("对象不是Person类型");}}}}classProgram{staticvoidMain(string[]args){Personp1=newPerson();Personp2=newPerson();Personp3=newPerson();Personp4=newPerson();ArrayListarray=newArrayList();array.Add(p1.Age=6);array.Add(p2.Age=10);array.Add(p3.Age=5);array.Add(p4.Age=11);数组.排序();foreach(数组中的变量列表){varperson=(人)列表;//在这里抛出异常。Console.WriteLine(list.GetType().ToString());//返回System.Int32}Console.ReadLine();你的行:array.Add(p1.Age=6)将语句p1.Age=6的结果添加到ArrayList中。这是int值6。与IComparable或Sort无关。实现IComparable的最佳方法是实现IComparable并将调用传递给该实现:classPerson:IComparable,IComparable{publicintAge{get;放;}publicintCompareTo(Personother){//这里应该是空检查。..返回this.Age.CompareTo(other.Age);}publicintCompareTo(objectobj){//这里应该是空检查...varotherPerson=objasPerson;if(otherPerson==null)thrownewArgumentException("...");//调用通用接口的实现:returnCompareTo(otherPerson);您没有将此人添加到数组中。p1.Age=6是一个赋值,它返回分配给变量/属性的任何内容(在本例中为6)。在将Persons放入数组之前,您需要执行赋值。如果只想将单一类型的元素放入集合中,则需要使用类型化集合而不是非类型化集合。这立即解决了问题。您正在将person.Age添加到您的数组列表中,而person.Age是一个整数。你该怎么办?以上就是C#学习教程:实现IComparable分享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——Personp1=newPerson(){Age=3};array.Add(p1);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
