Está escribiendo una expresión booleana que podría verse así:
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; }
}
... y obtienes un error:
El operador '&&' no se puede aplicar a operandos de tipo 'bool' y 'bool?'
¿Cuál es la forma óptima / más limpia de manejarlo?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)¿Es eso realmente legible?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()Es posible que no funcione en LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true¿Realmente escribirías
if (condition == true)sin dudarlo?
¿Hay más opciones? ¿Es finalmente mejor escribir:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet, es decir, no condicional nula después team, ya que ya no puede ser null.
nullableBool == truebásicamente está probando nullableBool != false && nullableBool != null(y es esta segunda parte la que lo hace útil y, por lo tanto, no superfluo)
nullableBool == truesi no creo un contenedor. Es legible porque normalmente no escribe == truecuando usa booleano regular como menciona @Flater, por lo que sugiere que la variable es anulable. Además, mejora la legibilidad de LINQ porque no utiliza múltiples condiciones nulas como menciona @Fabio.