반응형
이해하려고?. (null-conditional) 연산자 (C #)
이 매우 간단한 예가 있습니다.
class Program
{
class A
{
public bool B;
}
static void Main()
{
System.Collections.ArrayList list = null;
if (list?.Count > 0)
{
System.Console.WriteLine("Contains elements");
}
A a = null;
if (a?.B)
{
System.Console.WriteLine("Is initialized");
}
}
}
선은 if (list?.Count > 0)경우에 것을하는 수단 완벽하게 컴파일 list이며 null, 표현이 Count > 0됩니다 false기본적으로.
그러나, 라인은 if (a?.B)내가 암시 적으로 변환 할 수 없다는 컴파일러 오류가 발생 bool?에 bool.
하나가 다른 이유는 무엇입니까?
list?.Count > 0: 여기 당신은 비교int?에int를 산출bool하기 때문에, 해제 비교 연산자는를 반환bool하는 없습니다bool?.a?.B: 여기에bool?.if그러나에는bool.
첫 번째 경우 ( list?.Count) 연산자는 int?-a nullable을 반환합니다 int. (가) 경우되도록 오퍼레이터 널 정수에 대해 정의 된 값이없는 (NULL이다), 비교를 반환한다 .>int?false
두 번째 예에서 ( a?.B) a는 bool?(때문에 경우 반환 a둘, 널 (null)하지 true않고 false있지만, null반환)을. 그리고 bool?사용할 수 없습니다 if는 AS 문 if문이 (nullable이 아닌)가 필요합니다 bool.
해당 문을 다음과 같이 변경할 수 있습니다.
if (a?.B ?? false)
다시 작동하도록합니다. 따라서 null-coalescing 연산자 ( ??)는 falsenull 조건부 연산자 ( ?.) 가를 반환 할 때 반환 null됩니다.
또는 (TheLethalCoder가 제안한대로) :
if (a?.B == true)
반응형
'Development Tip' 카테고리의 다른 글
| 클래스의 Python 검사 인스턴스 (0) | 2020.11.27 |
|---|---|
| 초기화, 정의, 변수 선언의 차이점 (0) | 2020.11.27 |
| VBscript에서 명령 줄 인수 사용 (0) | 2020.11.27 |
| JQuery는 내부 텍스트를 변경하지만 HTML은 유지합니다. (0) | 2020.11.27 |
| Xcode 4는 리팩토링에서 스냅 샷 생성을 비활성화합니다. (0) | 2020.11.27 |