この場合、リストが必要ですか?リストに多くのアイテムを入力している場合、パフォーマンスはmyList.Contains
またはで低下しmyList.Any
ます。ランタイムは2次になります。より適切なデータ構造の使用を検討してください。例えば、
public class MyClass
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
public class MyClassComparer : EqualityComparer<MyClass>
{
public override bool Equals(MyClass x, MyClass y)
{
if(x == null || y == null)
return x == y;
return x.Property1 == y.Property1 && x.Property2 == y.Property2;
}
public override int GetHashCode(MyClass obj)
{
return obj == null ? 0 : (obj.Property1.GetHashCode() ^ obj.Property2.GetHashCode());
}
}
次の方法でHashSetを使用できます。
var set = new HashSet<MyClass>(new MyClassComparer());
foreach(var myClass in ...)
set.Add(myClass);
もちろん、この等価の定義MyClass
が「ユニバーサル」である場合、IEqualityComparer
実装を作成する必要はありません。あなただけオーバーライドすることができますGetHashCode
し、Equals
クラス自体インチ