Câu trả lời:
Cuối cùng bạn phải quyết định bool null sẽ đại diện cho cái gì. Nếu null
cần false
, bạn có thể làm điều này:
bool newBool = x.HasValue ? x.Value : false;
Hoặc là:
bool newBool = x.HasValue && x.Value;
Hoặc là:
bool newBool = x ?? false;
Linq
mệnh đề 'Ở đâu', tôi không thể hiểu tại sao lifted operators
dường như không hoạt động bên trong Linq (có lẽ nó chỉ là VB.NET?) - Tôi vừa thử nghiệm và nó ném một ngoại lệ cast không hợp lệ
Bạn có thể sử dụng các toán tử null-coalescing : x ?? something
, nơi something
là một giá trị boolean mà bạn muốn sử dụng nếu x
là null
.
Thí dụ:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
sẽ là sai.
bool? myBool = null; bool newBool = myBool ?? false;
Bạn có thể sử dụng Nullable{T}
GetValueOrDefault()
phương pháp. Điều này sẽ trả về false nếu null.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Nếu bạn định sử dụng bool?
trong một if
câu lệnh, tôi thấy điều dễ dàng nhất để làm là so sánh với một trong hai true
hoặc 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"; }
Tất nhiên, bạn cũng có thể so sánh với 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.
Nếu bạn định chuyển nó thành bool để chuyển sang các phần khác của ứng dụng, thì toán tử Null Coalesce là thứ bạn muốn.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Nếu bạn đã kiểm tra null và bạn chỉ muốn giá trị, thì hãy truy cập thuộc tính Value.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
Cách dễ nhất là sử dụng toán tử liên kết null: ??
bool? x = ...;
if (x ?? true) {
}
Với ??
giá trị nullable hoạt động bằng cách kiểm tra biểu thức nullable đã cung cấp. Nếu biểu thức nullable có một giá trị thì giá trị của nó sẽ được sử dụng, nếu không nó sẽ sử dụng biểu thức ở bên phải của??
bool? a = null;
bool b = Convert.toBoolean(a);
Câu trả lời này dành cho trường hợp sử dụng khi bạn chỉ muốn kiểm tra bool?
trong một điều kiện. Nó cũng có thể được sử dụng để có được một bình thường bool
. Nó là một sự thay thế mà tôi phân tích thấy dễ đọc hơn coalescing operator ??
.
Nếu bạn muốn kiểm tra một điều kiện, bạn có thể sử dụng
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Nếu ở trên sẽ chỉ đúng nếu bool?
đúng.
Bạn cũng có thể sử dụng điều này để chỉ định một thông thường bool
từ mộtbool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
phù thủy giống như
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Đây là một biến thể thú vị về chủ đề. Ở cái nhìn đầu tiên và thứ hai, bạn sẽ cho rằng nhánh thật được lấy. Không phải vậy!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
Cách để đạt được những gì bạn muốn là làm như sau:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
VB.NET
nếu bạn làmdim newBool as Boolean = CBool(x)
:? Sẽnull
được chuyển đổi thànhfalse
hoặc sẽ ném một ngoại lệ?