>백엔드 개발 >C++ >C# Null 검사: `x is null`과 `x == null`을 언제 사용해야 합니까?

C# Null 검사: `x is null`과 `x == null`을 언제 사용해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-30 12:55:09838검색

C# Null Checks: When to Use `x is null` vs. `x == null`?

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 is null을 사용하세요.

결국 x는 null과 x = 사이에서 선택됩니다. = null은 코드의 특정 요구 사항에 따라 다릅니다.

위 내용은 C# Null 검사: `x is null`과 `x == null`을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.