คุณกำลังเขียนนิพจน์บูลีนที่อาจมีลักษณะเช่นนี้:
team.Category == "A Team" && team?.Manager?.IsVietnamVet
public class Manager
{
public bool IsVietnamVet { get; set; }
}
public class Team
{
public string Category { get; set; }
public Manager Manager { get; set; }
}
... และคุณได้รับข้อผิดพลาด:
ผู้ประกอบการ '&&' ไม่สามารถใช้กับผู้ดำเนินการประเภท 'bool' และ 'bool?'
วิธีที่ดีที่สุด / สะอาดที่สุดในการจัดการคืออะไร?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)
มันอ่านได้จริงเหรอ?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()
มันอาจไม่ทำงานใน LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
คุณจะเขียน
if (condition == true)
โดยไม่ลังเลจริงๆหรือ?
มีตัวเลือกอื่น ๆ อีกไหม? ในที่สุดมันจะดีกว่าที่จะเขียน:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
คือไม่มี null หลังจากเงื่อนไขตั้งแต่อยู่แล้วไม่สามารถteam
null
nullableBool == true
เป็นพื้นทดสอบnullableBool != false && nullableBool != null
(และมันเป็นส่วนหนึ่งที่สองนี้ที่ทำให้มันมีประโยชน์และดังนั้นจึงไม่ฟุ่มเฟือย)
nullableBool == true
ถ้าฉันไม่ได้สร้างเสื้อคลุม สามารถอ่านได้เพราะปกติคุณจะไม่เขียน== true
เมื่อใช้บูลีนปกติตามที่ @Flater กล่าวถึงดังนั้นจึงแนะนำว่าตัวแปรนั้นเป็นโมฆะ ตามปกติแล้วจะปรับปรุงการอ่าน LINQ ได้เนื่องจากคุณไม่ได้ใช้หลายเงื่อนไขเป็น @Fabio กล่าวถึง