Sie schreiben einen booleschen Ausdruck, der folgendermaßen aussehen könnte:
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; }
}
... und Sie erhalten eine Fehlermeldung:
Der Operator '&&' kann nicht auf Operanden vom Typ 'bool' und 'bool?'
Was ist der optimale / sauberste Weg, damit umzugehen?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)
Ist das wirklich lesbar?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()
In LINQ-to-Entities funktioniert dies möglicherweise nicht ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
Würden Sie wirklich
if (condition == true)
ohne zu zögern schreiben ?
Gibt es noch andere Möglichkeiten? Ist es letztendlich besser zu schreiben:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
, dh keine nullbedingte Folge team
, da dies bereits nicht möglich ist null
.
nullableBool == true
testet im Grunde genommen nullableBool != false && nullableBool != null
(und es ist dieser zweite Teil, der es nützlich und daher nicht überflüssig macht)
nullableBool == true
wenn ich keinen Wrapper erstelle. Es ist lesbar, da Sie normalerweise nicht schreiben, == true
wenn Sie einen regulären Booleschen Wert verwenden, wie @Flater erwähnt. Daher wird vorgeschlagen, dass die Variable nullwertfähig ist. Darüber hinaus wird die LINQ-Lesbarkeit verbessert, da Sie nicht mehrere Nullbedingungen verwenden, wie @Fabio erwähnt.