가능한 중복 :동등 연산자를 오버로드 할 때 null 값을 처리하는 가장 좋은 방법은 무엇입니까?
public class Effect { public static bool operator == (Effect a, Effect b) { return a.Equals (b); } public static bool operator != (Effect a, Effect b) { return !a.Equals (b); } public bool Equals (Effect effect) { return this.TypeID.Equals (effect.TypeID); } public override bool Equals (object obj) { return this.TypeID.Equals (((Effect) obj).TypeID); } }
null 값을 처리 할 수있는 가장 강력하고 가장 깨끗한 방법은 무엇입니까 :
How do I check for nulls in an ‘==’ operator overload without infinite recursion?
내가 이런 유형이 말?
현재 인스턴스 (this
)와 전달 된 인스턴스 (effect/obj)
모두에 대해 null을 확인해야하는지 잘 모르겠습니다. 현재 인스턴스 (this
)에 null이 있으면 컴파일러는 여전히 effect.Equals 또는 Object.Equals를 호출합니까?
또한 null 확인이 수행되어야하는 방법은 무엇입니까? Equals 메서드 내에서만 같다고 가정하고 평등 연산자 (==, !=
)는 가정하지 않습니다.
두 개체의 평등을 속성의 동일성으로 대체하는 것이 좋습니다. 구조체로 작업하는 것을 볼 수 있지만, 클래스에 대해 ==를 오버라이드하는 것은 모호한 버그의 교착 상태처럼 보입니다. –
@djacobson,저기서 좋은 답변을 가져 주셔서 감사합니다. –
나는 liho1eye와 동의하는 경향이 있습니다. 일반적으로 == 연산자가 오버로드되면 나쁜 소식입니다. 개인적으로 코드에서 직접 .Equals()를 호출하는 것이 익숙해지는 것이 더 나은 방법이라고 생각합니다. – Doug