Vous écrivez une expression booléenne qui pourrait ressembler à ceci:
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; }
}
... et vous obtenez une erreur:
L'opérateur '&&' ne peut pas être appliqué aux opérandes de type 'bool' et 'bool?'
Quelle est la manière optimale / la plus propre de le gérer?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)
Est-ce vraiment lisible?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()
Cela peut ne pas fonctionner dans LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
Souhaitez-vous vraiment écrire
if (condition == true)
sans aucune hésitation?
Il y a-t-il des alternatives? Est-il finalement préférable d'écrire:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
, c'est-à-dire aucune conditionnelle nulle après team
, car elle ne peut déjà l'être null
.
nullableBool == true
teste essentiellement nullableBool != false && nullableBool != null
(et c'est cette deuxième partie qui la rend utile et donc pas superflue)
nullableBool == true
si je ne crée pas de wrapper. Il est lisible car vous n'écrivez normalement pas == true
lorsque vous utilisez un booléen ordinaire comme le mentionne @Flater, il suggère donc que la variable est nullable. De plus, cela améliore la lisibilité de LINQ car vous n'utilisez pas plusieurs conditions nulles comme le mentionne @Fabio.