2014-05-16 2 views
6

익명 형식을 비교할 때 Equals() 및 ==의 의미가 다른 이유는 무엇입니까? 왜 하나는 값을 비교하고 다른 하나는 참조를 비교합니까? 그 이유는 무엇입니까?익명 형식에 대한 동일성

답변

9

==Equals을 호출하지 않으며, == 오버로드 연산자를 찾습니다. 익명 형식은 연산자 ==을 오버로드하지 않으므로 C#은 참조 비교를 사용합니다.

그러나 Equals으로 필드 값을 비교합니다. 이것이 ==Equals 사이의 결과가 다른 이유입니다. 익명의 종류에 같고를 GetHashCode 방법이 등호와 등록 정보를 GetHashCode 방법으로 정의되므로

Anonymous Types (C# Programming Guide)

같은 익명 형 두 경우 모두의 경우에만 같다 그 속성은 동일합니다.

+0

감사! 내부적으로 C# 컴파일러는 익명 형식의 봉인 된 클래스를 구현합니다. 이유에 대한 이유는 == 참조를 비교하는 것이 나에게 완벽 함을 의미합니다. 그러나 참조 유형에 대한 값을 비교하는 Equals()는 나에게별로 의미가 없습니다. – DBK

+0

비록 문자열이 Equals()를 사용하여 문자열을 비교할 때 string 만 예외였습니다. 그러나 문자열의 경우에는 의미가 있습니다. – DBK