Posts 클래스 타입 객체가 null인지 검사하는 4가지 방법
Post
Cancel

클래스 타입 객체가 null인지 검사하는 4가지 방법

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) 메소드를 항상 호출하여 검사한다.

This post is licensed under CC BY 4.0 by the author.