คุณแปลง nullable bool?เป็นboolC # ได้อย่างไร
ฉันได้ลองx.Valueหรือx.HasValue...
คุณแปลง nullable bool?เป็นboolC # ได้อย่างไร
ฉันได้ลอง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เป็นค่าบูลีนที่คุณต้องการที่จะใช้ถ้าเป็นxnull
ตัวอย่าง:
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คำสั่งผมพบสิ่งที่ง่ายที่สุดที่จะทำคือการเปรียบเทียบกับอย่างใดอย่างหนึ่งหรือtruefalse
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หรือจะโยนข้อยกเว้น?