Ви пишете булевий вираз, який може виглядати приблизно так:
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; }
}
... і ви отримуєте помилку:
Оператор "&&" не може бути застосований до операндів типу "bool" і "bool?"
Який оптимальний / найчистіший спосіб впоратися з цим?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)Це справді читабельно?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()Він може не працювати в LINQ для юридичних осіб ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == trueВи б справді писали
if (condition == true)без вагань?
Чи є інші варіанти? Чи в кінцевому підсумку краще написати:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet, тобто не бути після цього умовною team, оскільки вже не може бути null.
nullableBool == trueв основному є тестуванням на nullableBool != false && nullableBool != null(а саме ця друга частина робить її корисною і тому не зайвою)
nullableBool == trueякщо я не створю обгортку. Він читабельний, оскільки ви, як правило, не пишете == trueпід час використання звичайного булевого тексту, як згадує @Flater, тому це дозволяє припустити, що змінна є нульовою. Крім того, це покращує читабельність LINQ, оскільки ви не використовуєте кілька нульових умов, як згадує @Fabio.