이 경우 목록이 필요합니까? 많은 항목으로 목록을 채우는 경우 성능이 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
클래스 자체입니다.