J'implémente IComparable pour trier les objets typés. Ma question est pourquoi est-ce que ça jette type person à int32? Le tableau Sort() semble lancer chaque type dans le tableau au type que j'utilise pour la comparaison.Implémentation de IComparable
Comparable:
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();
}
BTW: Si vous êtes sur .Net 3.5, vous n'avez pas besoin d'utiliser Trier() et IComparable. Il existe une nouvelle méthode d'extension appelée OrderBy qui est beaucoup plus facile à utiliser que Sort. –
S'il est sur .Net 3.5 (ou 2.0) il ne devrait vraiment pas utiliser ArrayList, mais Liste. Il n'aurait pas eu ce problème s'il l'avait fait (il aurait eu une erreur de compilation et il aurait probablement compris le problème). –
Pourquoi n'utilisez-vous pas les génériques 'List' et 'IComparable '? –
thecoop