您正在编写一个布尔表达式,可能看起来像这样:
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到实体...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
您真的会
if (condition == true)
毫不犹豫地写吗?
还有其他选择吗?最终写出来更好吗?
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
,即之后没有空条件部分team
,因为已经不能了null
。
nullableBool == true
基本上是在测试nullableBool != false && nullableBool != null
(并且第二部分使它有用,因此不是多余的)
nullableBool == true
如果不创建包装,我便开始使用。它是可读的,因为== true
使用@Flater提到的常规布尔值时通常不写,因此建议该变量为可空值。另外,由于您不使用@Fabio提到的多个空条件,因此它提高了LINQ的可读性。