C#의 Null 참조 비교: "x is null" 대 "x == null"
C# 7에서는 패턴 일치 연산자는 전통적인 == null 표현식과 비교하여 사용법에 대한 의문을 제기했습니다. 이러한 표현식은 null을 처리할 때 서로 바꿔 사용할 수 있는 것처럼 보일 수 있지만 참조 유형을 비교할 때 고려해야 할 주요 차이점이 있습니다.
유형 고려 사항
객체를 비교하는 == null과는 다릅니다. 같음에 대한 참조, x는 x 유형에 대한 null 검사입니다. x가 참조 유형인 경우 x is null은 x가 null인 경우에만 true를 반환합니다. 반대로 x == null은 null과 null 이외의 값을 가진 참조 유형 모두에 대해 true를 반환합니다.
class Foo {} Foo foo = null; Console.WriteLine(foo is null); // True Console.WriteLine(foo == null); // True
성능에 미치는 영향
내부적으로 x는 null 호출입니다. System.Object.Equals(object, object), x == null은 ceq(참조 유형에 대한 비교 방법)를 호출합니다. Null 참조의 경우 두 표현식 모두 true를 반환하므로 성능이 동일합니다. 그러나 null이 아닌 참조의 경우 x is null은 추가 유형 검사로 인해 상당히 느려질 수 있습니다.
오버로드된 동등 연산자
항등 연산자(예: == 또는 Equals)가 특정 유형에 대해 오버로드되면 x is null은 더 이상 유형 동일성을 확인하지 않고 대신 오버로드된 연산자에 위임합니다. 반면, x == null은 항상 참조 동등성을 확인합니다.
class Foo { public static bool operator ==(Foo left, Foo right) => ... public static bool operator !=(Foo left, Foo right) => ... } Foo foo1 = new Foo(); Foo foo2 = null; Console.WriteLine(foo1 is null); // False (checks type only) Console.WriteLine(foo1 == null); // False (delegates to overloaded operator) Console.WriteLine(foo2 is null); // True (checks type only) Console.WriteLine(foo2 == null); // True (reference comparison)
하나를 다른 것 대신 사용해야 하는 경우
일반적으로:
결국 x는 null과 x = 사이에서 선택됩니다. = null은 코드의 특정 요구 사항에 따라 다릅니다.
위 내용은 C# Null 검사: `x is null`과 `x == null`을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!