Я привожу IComparable для сортировки типа типизированных объектов. Мой вопрос заключается в том, почему он вводит тип человека в int32? Сортировка массива() кажется, что каждый тип массива применяет к типу, который я использую для сравнения.Реализация 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, вам не нужно использовать Sort() и IComparable. Существует новый метод расширения, называемый OrderBy, который намного проще в использовании, чем Sort. –
Если он на .Net 3.5 (или 2.0), он действительно не должен использовать ArrayList, но List. У него не было бы этой проблемы, если бы он (он получил ошибку компиляции, и это, вероятно, выяснило бы проблему). –
Почему вы не используете общий «Список» и 'IComparable '? –
thecoop