我实践IComparable排序类型的对象。我的问题是为什么它会将类型人员转换为int32?数组的Sort()似乎将数组中的每个类型转换为我用于比较的类型。实现IComparable
可比:
public class Person:IComparable
{
protected int age;
public int Age { get; set; }
public int CompareTo(object obj)
{
if(obj is Person)
{
var person = (Person) obj;
return age.CompareTo(person.age);
}
else
{
throw new ArgumentException("Object is not of type Person");
}
}
}
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
Person p4 = new Person();
ArrayList array = new ArrayList();
array.Add(p1.Age = 6);
array.Add(p2.Age = 10);
array.Add(p3.Age = 5);
array.Add(p4.Age = 11);
array.Sort();
foreach (var list in array)
{
var person = (Person) list; //Cast Exception here.
Console.WriteLine(list.GetType().ToString()); //Returns System.Int32
}
Console.ReadLine();
}
顺便说一句:如果你在NET 3.5的,你不需要使用排序()和IComparable。有一个名为OrderBy的新扩展方法比Sort更容易使用。 – 2009-12-12 19:11:41
如果他在.net 3.5(或2.0)上,他真的不应该使用ArrayList,而是列出。他不会有这个问题,如果他这样做(他会得到一个编译错误,并可能会找出问题)。 –
2009-12-12 19:14:42
为什么不使用通用'List'和'IComparable '? –
thecoop
2009-12-12 19:15:11