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) ...