Você está escrevendo uma expressão booleana que pode ser assim:
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 você recebe um erro:
O operador '&&' não pode ser aplicado a operandos do tipo 'bool' e 'bool?'
Qual é a maneira ideal / mais limpa de lidar com isso?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)Isso é realmente legível?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()Pode não funcionar no LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == trueVocê realmente escreveria
if (condition == true)sem hesitar?
Existem outras opções? Em última análise, é melhor escrever:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet, ou seja, nenhuma condição nula depois team, pois já não pode ser null.
nullableBool == trueé basicamente testando para nullableBool != false && nullableBool != null(e é esta segunda parte que faz com que seja útil e, portanto, não supérfluo)
nullableBool == truese não criar um invólucro. É legível porque você normalmente não escreve == trueao usar booleano regular como o @Flater menciona, portanto, sugere que a variável é anulável. Além disso, melhora a legibilidade do LINQ porque você não usa várias condições nulas, como o @Fabio menciona.