2014-03-06 1 views
3

나는 주위를 둘러 보았으나 아무도이 질문을하지 않은 것 같습니다. 그래서 여기에 있습니다.Int32.Equals vs '=='연산자

나는 IEquatable 인터페이스를 가질 사용자 지정 클래스에서 작업 중이므로 자신이 Equals 메서드를 만들고 있습니다. 다음은 그 모습입니다.

public bool Equals(QueryFilter qfilter) 
    { 
     if (qfilter == null) 
     { 
      return false; 
     } 
     return ((this.Value.Equals(qfilter.Value)) && 
      (this.Name.Equals(qfilter.Name)) && 
      (this.Order == qfilter.Order)); 
    } 

여기서 Value, Name 및 Order는 QueryFilter 클래스의 필드입니다. 값과 이름은 strings입니다. 그러나 Order는 int이고 == 연산자를 사용하는 것이 좋습니까? 아니면 Int32.Equals 메서드를 사용해야하는지 다른 필드가 비교하는 방법과 일치하는지 궁금합니다. 나는 MSDN을 확인했지만 많이 설명하지는 않았으며, 단지 과부하라고 말했지만,이 상황에서 이것이 무엇을 의미하는지 확신 할 수 없다. ==은 언제나 일하게 될 것입니까?

결론적으로 어느 것이 더 낫습니까? Int32.Equals 또는 ==? 그리고 언제 각각 하나씩 사용해야합니까?

+1

이 질문을보고 싶을 수도 있습니다 : http://stackoverflow.com/questions/7345970/c-default-implementation-for-and-operators-for-objects –

답변

16

예, == 연산자를 사용하는 것은 절대적으로 괜찮 너무 오래 Order컴파일시 유형 int 때문이다.

컴파일시의 형태가 object 인 경우

예를 들어, 당신은 처리 할 거라고는 int 값을 박스와 필요하시면 아니다 참조 평등, 함께 그 상자를 비교. 그러나 컴파일러가 값이 int이라는 것을 알고있는 한 괜찮습니다. 이 NameValue이 작업을 수행 할 수 또한 괜찮 것을

주 - 해당 속성의 컴파일시 유형이 있다고 가정 다시 string (다음 컴파일러가 string에서 제공하는 오버로드를 사용하기 때문에 그럼 당신은 할 수 있습니다. &&이 단락이 사실을 사용, 불필요한 괄호를 제거하고 왼쪽 얻을 :. 내가 확실히보고 선호

public bool Equals(QueryFilter other) 
{ 
    return other != null && 
      this.Value == other.Value && 
      this.Name == other.Name && 
      this.Order == other.Order; 
} 

...

이것은 또한 Value 또는 Namenull 인 경우를 처리합니다 (null 참조가 서로 같고 null이 아닌 참조와 같지 않음). null 속성 값에 대해 this.Value.Equals 또는 this.Name.Equals에 도달하면 기존 코드는 NullReferenceException이됩니다.

해시 코드가 일치하는지 확인하고 Equals(object)도 재정의해야합니다.

+0

문자열 비교를 위해 연산자 사용을 고려하지 않았습니다! 그리고 당신이 말했듯이, 나는 이름과 값이 절대로 null이 될 수 없다는 것을 확실히했습니다. 그러나 이것 역시 알고있는 것이 좋습니다. 답변 해 주셔서 감사합니다! –