segunda-feira, novembro 13, 2006

Método Contains

Após fazer um código idêntico ao seguinte fiquei muito chateado com o resultado que obtive.

class Program
{
static void Main(string[] args)
{
List < MemberToCompare > group = new List < MemberToCompare > ();
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: