Piszesz wyrażenie logiczne, które może wyglądać następująco:
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; }
}
... i pojawia się błąd:
Operatora „&&” nie można stosować do operandów typu „bool” i „bool?”
Jaki jest optymalny / najczystszy sposób, aby sobie z tym poradzić?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)Czy to naprawdę czytelne?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()Może nie działać w LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == trueCzy naprawdę napisałbyś
if (condition == true)bez wahania?
Czy są jakieś inne opcje? Czy ostatecznie lepiej jest napisać:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet, tzn. Później nie ma warunku null team, ponieważ już nie może być null.
nullableBool == truejest w zasadzie testowanie pod kątem nullableBool != false && nullableBool != null(i ta druga część sprawia, że jest przydatna, a zatem nie jest zbyteczna)
nullableBool == truejeśli nie utworzę opakowania. Jest czytelny, ponieważ normalnie nie piszesz, == truegdy używasz zwykłej wartości logicznej, jak wspomina @Flater, więc sugeruje, że zmienna ma wartość null. Dodatkowo poprawia to czytelność LINQ, ponieważ nie używasz wielu warunków zerowych, jak wspomina @Fabio.