Вы пишете логическое выражение, которое может выглядеть так:
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
, т.е. не иметь нулевой условной части после team
, поскольку уже не может быть null
.
nullableBool == true
в основном тестирует nullableBool != false && nullableBool != null
(и именно эта вторая часть делает его полезным и, следовательно, не лишним)
nullableBool == true
если я не создаю обертку. Это читабельно, потому что вы обычно не пишете == true
при использовании обычного логического значения, как упоминает @Flater, поэтому он предполагает, что переменная имеет значение null. Кроме того, это улучшает читаемость LINQ, потому что вы не используете несколько нулевых условий, как упоминает @Fabio.