Stai scrivendo un'espressione booleana che potrebbe apparire così:
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; }
}
... e ricevi un errore:
L'operatore "&&" non può essere applicato agli operandi di tipo "bool" e "bool?"
Qual è il modo ottimale / più pulito per gestirlo?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)
È davvero leggibile?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()
Potrebbe non funzionare in LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
Scriveresti davvero
if (condition == true)
senza alcuna esitazione?
Ci sono altre opzioni? Alla fine è meglio scrivere:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
, cioè nessuna condizione condizionale nulla dopo team
, poiché già non può esserlo null
.
nullableBool == true
sta fondamentalmente testando nullableBool != false && nullableBool != null
(ed è questa seconda parte che lo rende utile e quindi non superfluo)
nullableBool == true
se non creo un wrapper. È leggibile perché normalmente non si scrive == true
quando si usa il normale booleano come menziona @Flater, quindi suggerisce che la variabile è nullable. Adizionale, migliora la leggibilità di LINQ perché non usi più condizioni null come menziona @Fabio.