Development Tip

이해하려고?.

yourdevel 2020. 11. 27. 21:29
반응형

이해하려고?. (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) 연산자는 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)

참고 URL : https://stackoverflow.com/questions/38103963/trying-to-understand-null-conditional-operator-in-c-sharp

반응형