Jawaban:
Anda pada akhirnya harus memutuskan apa yang akan diwakili oleh null bool. Jika nullseharusnya false, Anda dapat melakukan ini:
bool newBool = x.HasValue ? x.Value : false;
Atau:
bool newBool = x.HasValue && x.Value;
Atau:
bool newBool = x ?? false;
Linqpernyataan klausa 'Di mana', saya tidak mengerti mengapa lifted operatorstampaknya 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 somethingadalah nilai boolean yang ingin Anda gunakan jika xini 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 ifpernyataan, menurut saya hal termudah untuk dilakukan adalah membandingkannya dengan trueatau 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 booldari 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.NETjika Anda melakukandim newBool as Boolean = CBool(x):? Akannulldikonversifalseatau akankah pengecualian dilemparkan?