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メソッドを実装する必要がありますが、それについてはよくわかりません。