Silverlight 응용 프로그램에서 2 개의 문자열을 비교하는 조건이 있습니다. 어떤 이유로 사용 ==
하면 true 를 .Equals()
반환하고 false 를 반환 합니다 .
코드는 다음과 같습니다.
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
왜 이런 일이 발생하는지에 대한 이유가 있습니까?
==
되지만 연산자는 다형성이 아닙니다. 이 코드에서 ==
연산자는 type object
에 대해 호출되며 값 1 대신 ID 비교를 수행합니다.
==
는 피연산자의 컴파일 타임 유형에 따라 오버로드를 선택합니다 . Content
호텔입니다 object
. 연산자는 가상이 아니므로 기본 구현을 ==
호출하여 참조 동등성을 비교합니다. Equals를 사용하면 호출이 가상 메소드로 이동합니다 object.Equals(object)
. string
이 메서드를 재정의하고 문자열 내용에 대한 서수 비교를 수행합니다. msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx 및 referencesource.microsoft.com/#mscorlib/system/string.cs,507을 참조 하십시오 .
==
컴파일 타임 유형이 object
있고 오른쪽에 컴파일 타임 유형 이 있으면 string
C # 컴파일러는 (이 경우 문제가되는) 오버로드를 선택해야합니다 operator ==(object, object)
. 하지만 것입니다 그것을 의도하지 않은 될 수 있다는 컴파일시 경고를 실행합니다. 그래서 읽기 컴파일시 경고! 문제를 해결하고 계속 사용 ==
하려면 왼쪽을로 캐스팅하세요 string
. 내가 올바르게 기억한다면 경고 문구가 그 사실을 암시합니다.