4가지 방법
[1]
1
instance == null;
1
2
3
4
5
6
7
8
// 1-1. == 연산자를 오버로딩 하지 않은 경우
ldloc.0
ldnull
ceq
// 1-2. == 연산자를 오버로딩한 경우
ldnull
call bool ClassName::op_Equality(class ClassName, class ClassName)
[2]
1
instance.Equals(null);
1
2
ldnull
callvirt instance bool [mscorlib]System.Object::Equals(object)
[3]
1
ReferenceEquals(instance, null);
1
2
3
ldloc.0
ldnull
ceq
[4]
1
2
// C# 7.0부터 사용 가능
instance is null;
1
2
3
ldloc.0
ldnull
ceq
정리
-
객체 참조가
null
인지 검사하려면 [3], [4]의 방법이 가장 간결한 어셈블리 코드를 생성하며, 정확하다. -
[1]는
==
연산자를 오버로딩했다면 해당 연산자 메소드를, 오버로딩 하지 않았다면ceq
를 호출하여 검사한다. -
[2]은
Equals(object)
메소드를 오버라이딩했다면 해당 메소드를, 오버라이딩 하지 않았다면object.Equals(object)
메소드를 항상 호출하여 검사한다.