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 == trueWü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 == truetestet im Grunde genommen nullableBool != false && nullableBool != null(und es ist dieser zweite Teil, der es nützlich und daher nicht überflüssig macht)
nullableBool == truewenn ich keinen Wrapper erstelle. Es ist lesbar, da Sie normalerweise nicht schreiben, == truewenn 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.