문제 파일
Packages/com.unity.inputsystem/InputSystem/Plugins/UnityRemote/UnityRemoteSupport.cs
에러 뜨는 부분
if (getConfigValueMethod != null && getConfigValueMethod.Invoke(null, new[] { "UnityRemoteResolution" }) == "Normal")
{
hdim1 = dimension1;
hdim2 = dimension2;
}
이 에러는 getConfigValueMethod.Invoke(null, new[] { "UnityRemoteResolution" })의 결과를 string 값과 비교하고 있는데, 이때 null과의 비교가 의도치 않게 참조 비교로 간주되어 경고가 발생한 것임
이를 해결하기 위해 명시적으로 형변환을 통해 값 비교를 수행하면 됨
참조 비교(Reference Comparison)
두 객체가 메모리 상에서 동일한 위치를 참조하고 있는지 여부를 확인하는 비교 방법
C#에서는 참조 타입들에 대한 비교 시에 기본적으로 참조 비교가 이루어짐
그러나 문자열(string)과 같은 몇몇 참조 타입들은 예외적으로 값 비교를 수행하도록 오버라이드되어 있음
즉, 두 문자열이 동일한 내용을 가지면 참조 비교가 아닌 값 비교로 같다고 판단됨
경고 메시지에서 언급된 "Possible unintended reference comparison"은 아마도 getConfigValueMethod.Invoke(...) 메서드의 반환 값이 string이라는 가정 하에 참조 비교를 하지 않을 것을 나타내고 있는 뜻일거임
그래서 (string)을 사용하여 형 변환을 시킨 후에 값 비교를 수행하도록 수정해야 함
고친 코드
if (getConfigValueMethod != null && (string)getConfigValueMethod.Invoke(null, new[] { "UnityRemoteResolution" }) == "Normal")
{
hdim1 = dimension1;
hdim2 = dimension2;
}
깔끔쓰
참고
https://stackoverflow.com/questions/12263715/possible-unintended-reference-comparison
Possible unintended reference comparison
I have the following code which gives a warning Possible unintended reference comparison; to get a value comparison, cast the left hand side to type 'string'` if (lblStatus.Content == "ACTIVE")...
stackoverflow.com