问题
How do you convert a nullable bool?
to bool
in C#?
I have tried x.Value
or x.HasValue
...
回答1:
You ultimately have to decide what the null bool will represent. If null
should be false
, you can do this:
bool newBool = x.HasValue ? x.Value : false;
Or:
bool newBool = x.HasValue && x.Value;
Or:
bool newBool = x ?? false;
回答2:
You can use the null-coalescing operator: x ?? something
, where something
is a boolean value that you want to use if x
is null
.
Example:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
will be false.
回答3:
You can use Nullable{T}
GetValueOrDefault()
method. This will return false if null.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
回答4:
If you're going to use the bool?
in an if
statement, I find the easiest thing to do is to compare against either true
or 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"; }
Of course, you can also compare against null as well.
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.
If you're going to convert it to a bool to pass on to other parts of the application, then the Null Coalesce operator is what you want.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
If you've already checked for null, and you just want the value, then access the Value property.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
回答5:
The easiest way is to use the null coalescing operator: ??
bool? x = ...;
if (x ?? true) {
}
The ??
with nullable values works by examining the provided nullable expression. If the nullable expression has a value the it's value will be used else it will use the expression on the right of ??
回答6:
bool? a = null;
bool b = Convert.toBoolean(a);
回答7:
The complete way would be:
bool b1;
bool? b2 = ???;
if (b2.HasValue)
b1 = b2.Value;
Or you can test for specific values using
bool b3 = (b2 == true); // b2 is true, not false or null
回答8:
Something like:
if (bn.HasValue)
{
b = bn.Value
}
回答9:
This answer is for the use case when you simply want to test the bool?
in a condition. It can also be used to get a normal bool
. It is an alternative I personnaly find easier to read than the coalescing operator ??
.
If you want to test a condition, you can use this
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
The above if will be true only if the bool?
is true.
You can also use this to assign a regular bool
from a bool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
witch is the same as
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
回答10:
This is an interesting variation on the theme. At first and second glances you would assume the true branch is taken. Not so!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
The way to get what you want is to do this:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
回答11:
System.Convert works fine by me.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
来源:https://stackoverflow.com/questions/6075726/convert-nullable-bool-to-bool