nullable bool을 변환 하시겠습니까? 부울


122

C #에서 nullable bool?을 어떻게 변환 bool합니까?

나는 시도 x.Value했거나 x.HasValue...

답변:


200

궁극적으로 null bool이 무엇을 나타낼 지 결정해야합니다. 경우 null이어야한다 false, 당신은이 작업을 수행 할 수 있습니다 :

bool newBool = x.HasValue ? x.Value : false;

또는:

bool newBool = x.HasValue && x.Value;

또는:

bool newBool = x ?? false;

다음과 같은 VB.NET경우에는 dim newBool as Boolean = CBool(x)어떨까요? 윌 null로 변환 false또는 예외가 발생한다?
Luke T O'Brien

그게 컴파일 되나요?
Ken Pespisa

네 그렇습니다- Linq'Where'절 에 대한 'Quick Action'에서 제안되었습니다. lifted operatorsLinq 내에서 작동하지 않는 것처럼 보이는 이유를 이해할 수 없었습니다 (아마도 VB.NET일까요?).-방금 테스트했으며 그것은 잘못된 캐스트 예외가 던져 않습니다
누가 복음 T 오브라이언

좋아요! :) 감사합니다!
praguan

또는 : bool newBool ​​= x == true;
Nick Westgate

104

당신은 사용할 수 있습니다 널 병합 연산자 : x ?? something, something경우에 당신이 사용하고자하는 부울 값 x입니다 null.

예:

bool? myBool = null;
bool newBool = myBool ?? false;

newBool 거짓이 될 것입니다.


1
그래서bool? myBool = null; bool newBool = myBool ?? false;
CaffGeek

86

Nullable{T} GetValueOrDefault()방법 을 사용할 수 있습니다 . null 인 경우 false를 반환합니다.

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();

6
간결함과 C # 멍청함 사이의 최고의 하이브리드라고 생각합니다. 또한 기본값을 지정할 수있는 과부하가 있습니다.
Phil

4
나는이 경우 문 '우아한'만들 수 있기 때문에,이 방법을 사용하여 같은if (nullableBool.GetValueOrDefault())
뤽 Wollants

9

당신이 사용하려고하는 경우 bool?if문 제가 할 수있는 가장 쉬운 방법 중 하나에 대해 비교하는 것입니다 찾을 수 true또는 false.

bool? b = ...;

if (b == true) { Debug.WriteLine("true"; }
if (b == false) { Debug.WriteLine("false"; }
if (b != true) { Debug.WriteLine("false or null"; }
if (b != false) { Debug.WriteLine("true or null"; }

물론 null과 비교할 수도 있습니다.

bool? b = ...;

if (b == null) { Debug.WriteLine("null"; }
if (b != null) { Debug.WriteLine("true or false"; }
if (b.HasValue) { Debug.WriteLine("true or false"; }
//HasValue and != null will ALWAYS return the same value, so use whatever you like.

응용 프로그램의 다른 부분으로 전달하기 위해 bool로 변환하려는 경우 Null Coalesce 연산자가 원하는 것입니다.

bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false

이미 null을 확인하고 값만 원하는 경우 Value 속성에 액세스합니다.

bool? b = ...;
if(b == null)
    throw new ArgumentNullException();
else
    SomeFunc(b.Value);

5

가장 쉬운 방법은 null 병합 연산자를 사용하는 것입니다. ??

bool? x = ...;
if (x ?? true) { 

}

??널 (NULL) 값은 제공 가능 표현식을 검사하여 작동합니다. nullable 표현식에 값이 있으면 해당 값이 사용됩니다. 그렇지 않으면 오른쪽에있는 표현식을 사용합니다.??



2

완전한 방법은 다음과 같습니다.

bool b1;
bool? b2 = ???;
if (b2.HasValue)
   b1 = b2.Value;

또는 다음을 사용하여 특정 값을 테스트 할 수 있습니다.

bool b3 = (b2 == true); // b2 is true, not false or null

2

다음과 같은 것 :

if (bn.HasValue)
{
  b = bn.Value
}

2

이 답변은 단순히 bool?조건에서 테스트하려는 경우 사용 사례 입니다. 또한 정상을 얻는 데 사용할 수 있습니다 bool. 그것은 내가 개인적으로 coalescing operator ??.

조건을 테스트하려면 다음을 사용할 수 있습니다.

bool? nullableBool = someFunction();
if(nullableBool == true)
{
    //Do stuff
}

위의 if는 true 인 경우에만 bool?true입니다.

또한 이것을 사용 bool하여bool?

bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;

마녀는

bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;

0

이것은 주제에 대한 흥미로운 변형입니다. 처음과 두 번째 눈에 진정한 가지를 취했다고 가정 할 것입니다. 별로!

bool? flag = null;
if (!flag ?? true)
{
    // false branch
}
else
{
    // true branch
}

원하는 것을 얻는 방법은 다음과 같습니다.

if (!(flag ?? true))
{
    // false branch
}
else
{
    // true branch
}

-2

System.Convert가 잘 작동합니다.

using System; ... Bool fixed = Convert.ToBoolean(NullableBool);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.