C# 연산자 오버로딩 : ==, Equals에서 null값 판단하기
글 작성자: Doublsb
문제 상황
== 연산자를 오버로딩하고 사용하려 했는데, 문제가 발생했다.
a == b 와 같은 구문에서 a나 b가 null인 경우를 판단할 수 없었기 때문이었다.
public static bool operator ==(Stat a, Stat b)
{
if (a == null && b == null) return true;
}
이와 같이 작성하게 되면, 스택 오버플로우가 발생한다.
이유는 당연하다. a == null인 구문도 연산자 오버로딩한 '==' 연산자를 사용하기 때문.
해결법
object.ReferenceEquals(object, object)을 사용하면 된다.
Equals나 ==과는 달리, object.ReferenceEquals는 재정의할 수 없는 메서드이다.
이 메서드는 지정한 object의 인스턴스가 동일한지 체크한다.
따라서 오버로딩한 Equals/==를 사용하지 않고 두 개체를 비교할 수 있는 것.
public static bool operator ==(Stat a, Stat b)
{
if (object.ReferenceEquals(a, null))
return object.ReferenceEquals(b, null);
else if (object.ReferenceEquals(b, null))
return false;
//이후 원하는 return 코드 작성
}
==를 오버로딩할 때 위와 같이 코드를 작성하면 null 체크 이후 원하는 return값을 던질 수 있을 것이다.
반응형
'프로그래밍 > C#' 카테고리의 다른 글
Enum.ToString 최적화하기 (0) | 2022.02.25 |
---|---|
[.Net C# 설명서] 읽고 정리하기 (0) | 2021.09.29 |
[C# 코딩의 기술]에서 얻은 지식들 (0) | 2021.09.24 |
LINQ Method 정리 (1) | 2020.05.06 |
C# Closure : for문의 변수를 람다식에서 참조하면 슬퍼지는 이유 (2) | 2019.07.29 |
댓글
이 글 공유하기
다른 글
-
[.Net C# 설명서] 읽고 정리하기
[.Net C# 설명서] 읽고 정리하기
2021.09.29 -
[C# 코딩의 기술]에서 얻은 지식들
[C# 코딩의 기술]에서 얻은 지식들
2021.09.24 -
LINQ Method 정리
LINQ Method 정리
2020.05.06 -
C# Closure : for문의 변수를 람다식에서 참조하면 슬퍼지는 이유
C# Closure : for문의 변수를 람다식에서 참조하면 슬퍼지는 이유
2019.07.29