조건식에서 널 입력 가능 부울을 확인하는 가장 좋은 방법 (… 조건 검사를 수행하는 데 가장

nullable bool에 대한 조건 검사를 수행하는 데 가장 깨끗하고 이해하기 쉬운 구문이 무엇인지 궁금했습니다.

다음은 좋은 코딩 스타일입니까? 상태를 더 좋고 깨끗하게 표현할 수있는 방법이 있습니까?

bool? nullableBool = true;
if (nullableBool ?? false) { ... }
else { ... }

특히 if (nullableBool ?? false) 부분. 나는 if (x.HasValue && x.Value)스타일이 마음에 들지 않습니다 …

(질문이 이전에 질문되었는지 여부는 확실하지 않습니다 … 검색과 비슷한 것을 찾을 수 없습니다)



답변

많은 사람들 이이 가치가 nullable이라는 사실에 집중하고 실제로 원하는 것에 대해 생각하지 않습니다. 🙂

bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else { ... } // false or null

또는 더 많은 옵션을 원한다면 …

bool? nullableBool = true;
if (nullableBool == true) { ... } // true
else if (nullableBool == false) { ... } // false
else { ... } // null

(nullableBool == true)bool 경우 절대로 true를 반환하지 않습니까? null : P


답변

GetValueOrDefault 를 사용 하는 것은 어떻습니까? 자체적으로 설명하고 원하는 기본값을 사용할 수 있습니다.

if (nullableBool.GetValueOrDefault(false)) {
}

답변

당신은 그것을 좋아하지 않을 수 있지만, 개인적으로 나는 찾아

if (x.HasValue && x.Value)

가장 읽기 쉬운. 널 입력 가능 유형으로 작업하고 있음을 분명히하고 조건부로 작동하기 전에 널 입력 가능 유형에 값이 있는지 먼저 확인하고 있음을 알 수 있습니다.

버전을 가져 와서 변수를 x로 바꾸면 다음과 같이 읽습니다.

if (x ?? false)

그게 분명한가요? x가 nullable 유형이라는 것이 명백합니까? 내가 결정하게 해줄 게


답변

null을 false 로 취급 하려면 가장 간결한 방법은 다음과 같이 null 병합 연산자 ( ??) 를 사용하는 것입니다.

if (nullableBool ?? false) { ... }

답변

부울 만 생각해? 3 개의 값을 가지면 일이 쉬워집니다.

if (someNullableBool == true)     // only if true
if (someNullableBool == false)    // only if false
if (someNullableBool == null)     // only if null

답변

확장을 사용하십시오.

public static class NullableMixin {
    public static bool IsTrue(this System.Nullable<bool> val) {
        return val == true;
    }
    public static bool IsFalse(this System.Nullable<bool> val) {
        return val == false;
    }
    public static bool IsNull(this System.Nullable<bool> val) {
        return val == null;
    }
    public static bool IsNotNull(this System.Nullable<bool> val) {
        return val.HasValue;
    }
}


Nullable<bool> value = null;
if(value.IsTrue()) {
// do something with it
}

답변

null과의 비교가 어떻게 정의되는지 확인하자 :

static void Main()
    {
        Console.WriteLine($"null != null  => {null != null}");
        Console.WriteLine($"null == null  => {null == null}");
        Console.WriteLine($"null != true  => {null != true}");
        Console.WriteLine($"null == true  => {null == true}");
        Console.WriteLine($"null != false => {null != false}");
        Console.WriteLine($"null == false => {null == false}");
    }

결과는 다음과 같습니다.

null != null  => False
null == null  => True
null != true  => True
null == true  => False
null != false => True
null == false => False

따라서 다음을 안전하게 사용할 수 있습니다.

// check if null or false
if (nullable != true) ...

// check if null or true
if (nullable != false) ...

// check if true or false
if (nullable != null) ...