Section 8.4: Null 조건부 연산자를 Extension Method 와 함께 사용하기
본디 Extension Method 자체가 null reference 에 대해서도 동작하게 되어 있으나, ?.
을 이용하여 null 체크를 하는 것 역시 가능하다.
public class Person {
public string Name {
get;
set;
}
}
public static class PersonExtensions {
public static int GetNameLength(this Person person) {
return person == null ? -1 : person.Name.Length;
}
}
보통은, 이 메소드가 null reference 에 대해서 불리는 경우 -1
값을 반환하게 될 것이다:
Person person = null;
int nameLength = person.GetNameLength(); // -1 을 반환한다.
?.
을 이용하면 이 메소드가 null reference 에 대해서는 불리지 않을 것이며, 반환 타입은 int?
이 될 것이다:
Person person = null;
int? nameLength = person?.GetNameLength(); // nameLength 는 null 이 된다.
이러한 결과는 사실 ?.
연산자가 동작하는 방식으로부터 충분히 예상 가능하다: NullReferenceException
이 발생되는 것을 피하기 위해, null instance 에 대해서는 instance method 호출을 피하도록 되어 있기 때문이다.
그러나, method 의 선언 방식에 대해서만 차이가 있을 뿐, 사실 동일한 회피 로직은 extension method 에 대해서도 적용되어 있다.
첫번째 예제에서 어떠한 이유로 extension method 가 호출이 되고 있는지에 대한 추가 정보를 확인하고 싶다면, "Section 48.2 Extension method - null 체크하기" 문서를 참고하라.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
9.1: nameof 기본 사용법: 변수 이름 출력하기 (0) | 2021.01.11 |
---|---|
9: nameof 연산자 (0) | 2021.01.11 |
8.3: NullReferenceException 방지하기 (0) | 2020.12.10 |
8.2: Null 조건부 인덱스 (index) (0) | 2020.12.10 |
8.1: Null 조건부 연산자 (0) | 2020.12.08 |