5월, 2018의 게시물 표시

[C#] x == null / x is null 차이

  코딩 중 문득 궁금해져서 알아봤습니다. 변수 == null 과 변수 is null 의 차이점.   객체끼리 비교한다는 가정 하에, 둘은 차이가 없다는 결론을 얻었습니다. 그러나 일부 상황에서는 심각한 차이가 발생합니다.   일단 차이가 없는 경우를 먼저 보여드리면, 객체끼리 비교하는 아래와 같은 상황입니다. string a; Console.WriteLine(a is null); // => true Console.WriteLine(a == null); // => true a = null; Console.WriteLine(a is null); // => true Console.WriteLine(a == null); // => true   물론, string 뿐 아니라 다른 여러 객체에도 해당됩니다.   그럼 심각한 문제가 생기는 상황이란 뭘까요? 예상하신 분도 계시겠지만, 바로 Primitive type , Value type 에 is null 을 사용하는 상황입니다. int a; Console.WriteLine(a == null); // => false Console.WriteLine(a is null); // error CS0037: 'int'은(는) null을 허용하지 않는 값 형식이므로 null을 이 형식으로 변환할 수 없습니다.   위의 예제는 원시 타입에 is null을 쓸 경우에 나타나는 에러 메세지이지만, Enum과 같은 값 타입에 is null을 쓸 때에도 마찬가지로 동일한 에러가 나타납니다.   물론, CS0037이란 이름에서 알 수 있듯 런타임 에러가 아니기 때문에, 빌드 전 미리 확인하고 대처할 수 있습니다.