class Program { static void Main(string[] args) { List for(int i = 0; i < 3; ++i) { MemberToCompare toInsert = new MemberToCompare(1); if(!group.Contains(toInsert)) group.Add(toInsert); } Console.WriteLine(group.Count + " elementos inseridos!"); Console.ReadLine(); } } class MemberToCompare: IComparable { public int test; public MemberToCompare(int i) { test = i; } public int CompareTo(object obj) { MemberToCompare other = obj as MemberToCompare; if (other == null) { return -1; } if (other.test == test) return 0; else return 1; } } |
O resultado que obtive foi a inserção de 3 elementos ao invés de 1 que era o que esperava. Para mim existe um erro claro na implementação do método Contains de uma lista que é tipificada. O método Contains de uma lista não tipificada chamar sempre o método CompareTo de object é algo que não me choca, mas o facto do método Contains de uma lista tipificada não chamar o CompareTo do tipo de objectos que esta contem é algo que não consigo perceber.
EDIT: Parece que vou ter que fazer mea culpa e reconhecer a minha falta de conhecimento. Neste caso o método CompareTo é utilizado para fazer sort nas listas. O método Contains chama sim o método Equals de cada objecto.
Sem comentários:
Enviar um comentário