반응형
이해하려고?. (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 연산자 ( ??
)는 false
null 조건부 연산자 ( ?.
) 가를 반환 할 때 반환 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 |