C#에서 ==
연산자를 오버로드할 때 null 값을 처리할 때 무한 재귀를 피하세요
C#에서 ==
연산자를 오버로드할 때 null 값을 처리할 때 흔히 발생하는 문제가 있습니다. 다음 코드 조각을 고려해보세요.
<code class="language-csharp">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; // 潜在的无限递归 return foo1.Equals(foo2); }</code>
이 경우 ==
오버로드는 ==
연산자 자체를 사용하여 null 값을 확인합니다. foo1
가 비어 있으면 foo2 == null
도 비어 있는 것으로 평가되어 ==
메서드가 무한히 호출되기 때문에 이로 인해 무한 재귀가 발생할 수 있습니다.
이 문제를 방지하려면 ==
오버로드에서 ReferenceEquals
대신 ==
을 사용하여 null 값을 확인해야 합니다. ReferenceEquals
은 재귀 호출을 수행하지 않으므로 무한 재귀를 발생시키지 않고 하나 또는 두 개의 개체가 null인지 안전하게 확인할 수 있습니다. 수정된 코드는 다음과 같습니다.
<code class="language-csharp">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null); return foo1.Equals(foo2); }</code>
ReferenceEquals
을 사용하도록 null 검사를 수정하면 ==
오버로드가 무한 재귀를 트리거하지 않고 효율적으로 null 값을 처리합니다. Equals
비교로 넘어가기 전에 foo1
과 foo2
의 null 값을 정확하게 비교합니다. 이 접근 방식을 사용하면 Null 값이 있는 경우에도 연산자의 동작이 항상 일관되고 신뢰할 수 있습니다.
이 수정된 설명은 문제와 해결책을 더욱 간결하게 설명합니다. 이미지는 원래 형식과 위치를 유지합니다.
위 내용은 Null 검사를 사용하여 C#에서 '==' 연산자를 오버로드할 때 무한 재귀를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!