Я использую List.Contains, чтобы определить, находится ли переменная внутри списка или нет, но она продолжает возвращаться, если это не так.Почему List.Contains не работает с моим кодом?
Я искал MSDN, и я заметил, что мне нужно наследовать от IEquatable и реализовать свой собственный метод .Equals. Фактический класс наследуется от другого, поэтому я написал метод .Equals в базовом классе.
Вот код класса «Actividad»:
abstract public class Actividad:IEquatable<Actividad> {
protected int codigo;
[...]
public bool Equals(Actividad otra)
{
return this.Codigo == otra.Codigo;
}
}
и вот определение класса ребенок «Actividad_a»:
public class Actividad_a : Actividad{ [...] }
Это код, который проверяет, является ли то, что находится внутри список:
private void loadDisponibles() {
foreach (Actividad_a act in Program.Asignaturas) {
if (!user1.ActAcademicas.Contains(act)) {
doSomething();
}
}
}
Program.Asignaturas
и user1.ActAcademicas
определены как List<Actividad_a>
.
Проблема в том, что !user1.ActAcademicas.Contains(act)
всегда возвращает true, независимо от того, находятся ли данные в списке или нет.
Мое первое предположение, что я должен наследовать от IEquatable и реализовать метод .Equals в каждом производном классе, но я не уверен в этом.
ли список пуст, когда вы проверяете содержит? – asawyer
Насколько я проверял, у него есть один элемент. Хотя я не проверяю, есть ли у него что-нибудь. Это имеет значение? – vguzmanp
'Contains' использует' Equals', поэтому да, вы должны его реализовать. – gdoron