คุณแปลง nullable bool?
เป็นbool
C # ได้อย่างไร
ฉันได้ลองx.Value
หรือx.HasValue
...
คุณแปลง nullable bool?
เป็นbool
C # ได้อย่างไร
ฉันได้ลองx.Value
หรือx.HasValue
...
คำตอบ:
ในที่สุดคุณต้องตัดสินใจว่าบูลว่างจะเป็นตัวแทนของอะไร หากnull
ควรจะเป็นfalse
คุณสามารถทำได้:
bool newBool = x.HasValue ? x.Value : false;
หรือ:
bool newBool = x.HasValue && x.Value;
หรือ:
bool newBool = x ?? false;
Linq
คำสั่ง 'Where' ฉันไม่เข้าใจว่าทำไมlifted operators
ดูเหมือนจะไม่ทำงานใน Linq (อาจเป็นแค่ VB.NET?) - ฉันเพิ่งทดสอบและ มันทำให้เกิดข้อยกเว้นการร่ายที่ไม่ถูกต้อง
คุณสามารถใช้ประกอบการด้วย null coalescing : x ?? something
ซึ่งsomething
เป็นค่าบูลีนที่คุณต้องการที่จะใช้ถ้าเป็นx
null
ตัวอย่าง:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
จะเป็นเท็จ
bool? myBool = null; bool newBool = myBool ?? false;
คุณสามารถใช้Nullable{T}
GetValueOrDefault()
วิธีการ สิ่งนี้จะส่งคืนเท็จหากเป็นโมฆะ
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
หากคุณกำลังจะใช้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"; }
แน่นอนคุณสามารถเปรียบเทียบกับค่าว่างได้เช่นกัน
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.
หากคุณจะแปลงเป็นบูลเพื่อส่งต่อไปยังส่วนอื่น ๆ ของแอปพลิเคชันตัวดำเนินการ Null Coalesce คือสิ่งที่คุณต้องการ
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
หากคุณได้ตรวจสอบค่าว่างแล้วและคุณต้องการเพียงแค่ค่านั้นให้เข้าไปที่คุณสมบัติ Value
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);
วิธีที่ง่ายที่สุดคือใช้ตัวดำเนินการเชื่อมต่อแบบ null: ??
bool? x = ...;
if (x ?? true) {
}
ที่??
มีค่า nullable ทำงานโดยการตรวจสอบนิพจน์ที่เป็นโมฆะที่ระบุ หากนิพจน์ที่เป็นโมฆะมีค่าจะใช้ค่าของมันมิฉะนั้นจะใช้นิพจน์ทางด้านขวาของ??
bool? a = null;
bool b = Convert.toBoolean(a);
วิธีที่สมบูรณ์คือ:
bool b1;
bool? b2 = ???;
if (b2.HasValue)
b1 = b2.Value;
หรือคุณสามารถทดสอบค่าเฉพาะโดยใช้
bool b3 = (b2 == true); // b2 is true, not false or null
สิ่งที่ต้องการ:
if (bn.HasValue)
{
b = bn.Value
}
คำตอบนี้มีไว้สำหรับกรณีการใช้งานเมื่อคุณต้องการทดสอบbool?
เงื่อนไข bool
นอกจากนี้ยังสามารถนำมาใช้เพื่อให้ได้ตามปกติ เป็นอีกทางเลือกหนึ่งที่ฉันหาอ่านได้ง่ายกว่าไฟล์coalescing operator ??
.
หากคุณต้องการทดสอบเงื่อนไขคุณสามารถใช้สิ่งนี้ได้
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
ข้างต้นถ้าจะเป็นจริงก็ต่อเมื่อไฟล์ bool?
เป็นจริง
คุณยังสามารถใช้สิ่งนี้เพื่อกำหนดค่าปกติbool
จากไฟล์bool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
แม่มดก็เช่นเดียวกับ
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
นี่เป็นรูปแบบที่น่าสนใจในธีม ในการมองครั้งแรกและครั้งที่สองคุณจะถือว่าสาขาที่แท้จริงถูกยึด ไม่อย่างนั้น!
bool? flag = null;
if (!flag ?? true)
{
// false branch
}
else
{
// true branch
}
วิธีที่จะได้รับสิ่งที่คุณต้องการคือทำสิ่งนี้:
if (!(flag ?? true))
{
// false branch
}
else
{
// true branch
}
System.Convert ทำงานได้ดีโดยฉัน
using System;
...
Bool fixed = Convert.ToBoolean(NullableBool);
VB.NET
ถ้าคุณทำ:dim newBool as Boolean = CBool(x)
? จะnull
ถูกแปลงเป็นfalse
หรือจะโยนข้อยกเว้น?