다음 표현이 다른 이유는 무엇입니까?
[1] (object)0 == (object)0 //false
[2] ((object)0).Equals((object)0) // true
실제로 .NET 런타임이 box정수를 사용하고 참조 비교를 시작 하기 때문에 [1]을 완전히 이해할 수 있습니다 . 그러나 [2]가 다른 이유는 무엇입니까?
int16일명 shortEquals 메서드 에서 사용 가능한 오버로드를 확인한 다음 msdn.microsoft.com/en-us/library/ms173105.aspx 를 참조 하십시오. . 나는 Eric Lippert의 퍼즐을 망치고 싶지 않지만 일단 그 페이지를 읽으면 이해하기가 꽤 쉬울 것입니다.
((Integer)0)==((Integer)0)true로 평가됩니다.
IFormattable x = 0; bool test = (object)x == (object)x;. 구조체가 이미 상자에있는 경우 새 권투가 수행되지 않습니다.
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);했으니 다음의 결과를 예측하여 이해를 확인하십시오. 이제 현실과 비교해보십시오. 당신의 예측이 맞습니까? 그렇지 않다면 불일치를 설명 할 수 있습니까?