iequalitycomparer.equals ienumerable과 함께 사용하면 x 또는 y가 목록의 값입니까?
-
09-09-2019 - |
문제
ienumberable에는 확장 방법이 포함되어 있습니다u003CT> 두 개의 매개 변수가 필요합니다. 첫 번째 매개 변수는 확인할 값이고 두 번째 매개 변수는 iequalitycomparer의 구현입니다. iqualitycomparer.equals를 보면 첫 번째와 두 번째 객체를 비교하려면 x와 y라는 두 개의 매개 변수가 필요합니다.
내 질문은 x 또는 y입니다.
예시
List<string> test = new List<String() { "a", "b", "c" };
test.Contains("d", myComparer);
첫 번째 값에 대한 동등한 메소드를 호출 할 때 ( "A", "D") 또는 동등한 ( "D", "A")입니까?
해결책
중요하지 않아야합니다 - 평등은 대칭이어야합니다. 문서에서 IEqualityComparer<T>.Equals
:
동등한 방법은 반사적이고 대칭이며 전이 적입니다. 즉, 객체를 그 자체와 비교하는 데 사용되면 사실이 반환됩니다. y와 x에 대해 true 인 경우 두 객체 x와 y의 경우 true; 그리고 x와 y의 경우에도 두 개의 객체 x와 z의 경우 y와 z의 경우에도 마찬가지입니다.
나는 사용법을 믿지 않는다 Enumerable.Contains
잘 정의되어 있습니다. 즉, 향후 버전에서 변경 될 수 있습니다. 평등 비교를 위해 인터페이스 문서를 준수하면 괜찮을 것입니다.
다른 팁
완전성을 위해 반사 된 코드는 왼쪽에 있음을 보여줍니다 (아래 참조). 그러나 그것은 결코 변화하지 않겠다는 약속이 없으므로 그것을 사용할 위험이 있습니다.
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer)
{
if (comparer == null)
{
comparer = EqualityComparer<TSource>.Default;
}
if (source == null)
{
throw Error.ArgumentNull("source");
}
foreach (TSource local in source)
{
if (comparer.Equals(local, value))
{
return true;
}
}
return false;
}
제휴하지 않습니다 StackOverflow