내 (단위) 테스트 커버리지가 여전히 매우 낮기 때문에 안타깝게도 많은 실수를 많이 겪어야합니다. 따라서 리팩토링 중에는 C# 컴파일러의 형식 검사에 크게 의존합니다.유형 안전 Equals()
오늘 리팩터링 중에 도입 된 버그는 x.Equals(aThingWrappingOriginalThing)
이라는 줄을 누락하여 수정되었습니다. 그것은 bool Equals(object T)
이므로 컴파일러는 불평하지 않았습니다. 그러나 Equals()
을 (BCL 대신에) 직접 사용하는 시간의 90 %를 논리적으로 같은 유형의 개체와 비교하려고합니다.
이제는 (C#의) 이러한 상황에 대해 Equals()
의 유형 안전 버전을 승격 한 사람을 본 적이없는 이유가 궁금합니다. 이것에 대한 모범 사례가 있습니까?
public static bool SafeEquals<T>(this T a, T b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool SafeEquals<X>(this IEquatable<X> a, IEquatable<X> b)
{
if (a == null) return b == null;
return a.Equals(b);
}
이 최적화 될 수 있습니다 :
나는과 같이, 그 comparisions에 대한 확장 방법을 사용하는 유혹 해요? http://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html
주제에 대한 배경은 http://blogs.msdn.com/b/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx – Vlad