Jawaban:
Anda pada akhirnya harus memutuskan apa yang akan diwakili oleh null bool. Jika null
seharusnya false
, Anda dapat melakukan ini:
bool newBool = x.HasValue ? x.Value : false;
Atau:
bool newBool = x.HasValue && x.Value;
Atau:
bool newBool = x ?? false;
Linq
pernyataan klausa 'Di mana', saya tidak mengerti mengapa lifted operators
tampaknya tidak berfungsi di dalam Linq (mungkin hanya VB.NET?) - Saya baru saja menguji dan itu tidak melempar pengecualian pemain yang tidak valid
Anda dapat menggunakan null-penggabungan Operator : x ?? something
, di mana something
adalah nilai boolean yang ingin Anda gunakan jika x
ini null
.
Contoh:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
akan salah.
bool? myBool = null; bool newBool = myBool ?? false;
Anda bisa menggunakan Nullable{T}
GetValueOrDefault()
metode. Ini akan mengembalikan nilai salah jika nol.
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
Jika Anda akan menggunakan bool?
in sebuah if
pernyataan, menurut saya hal termudah untuk dilakukan adalah membandingkannya dengan true
atau 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"; }
Tentu saja, Anda juga bisa membandingkan dengan 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.
Jika Anda akan mengubahnya menjadi bool untuk diteruskan ke bagian lain dari aplikasi, maka operator Null Coalesce adalah yang Anda inginkan.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Jika Anda sudah memeriksa null, dan Anda hanya menginginkan nilainya, akses properti Value.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
Cara termudah adalah dengan menggunakan operator penggabungan nol: ??
bool? x = ...;
if (x ?? true) {
}
The ??
with nullable values bekerja dengan memeriksa ekspresi nullable yang disediakan. Jika ekspresi nullable memiliki nilai, nilainya akan digunakan jika tidak akan menggunakan ekspresi di sebelah kanan??
Jawaban ini untuk kasus penggunaan saat Anda hanya ingin menguji bool?
dalam kondisi. Itu juga bisa digunakan untuk menjadi normal bool
. Ini adalah alternatif yang menurut saya lebih mudah dibaca daripada coalescing operator ??
.
Jika Anda ingin menguji suatu kondisi, Anda dapat menggunakan ini
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
Di atas jika akan benar hanya jika bool?
benar.
Anda juga dapat menggunakan ini untuk menetapkan reguler bool
dari abool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
penyihir sama dengan
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
Ini adalah variasi tema yang menarik. Pada pandangan pertama dan kedua Anda akan berasumsi bahwa cabang yang sebenarnya telah diambil. Tidak begitu!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
Cara mendapatkan apa yang Anda inginkan adalah dengan melakukan ini:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert bekerja dengan baik oleh saya.
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
jika Anda melakukandim newBool as Boolean = CBool(x)
:? Akannull
dikonversifalse
atau akankah pengecualian dilemparkan?