Bạn đang viết một biểu thức boolean có thể trông như thế này:
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; }
}
... và bạn gặp lỗi:
Toán tử '&&' không thể được áp dụng cho toán hạng loại 'bool' và 'bool?'
Cách tối ưu / sạch nhất để xử lý nó là gì?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)
Điều đó thực sự có thể đọc được?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()
Nó có thể không hoạt động trong LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
Bạn sẽ thực sự viết
if (condition == true)
mà không có bất kỳ do dự?
Có sự lựa chọn nào khác không? Cuối cùng là tốt hơn để viết:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
, tức là không có điều kiện null sau team
, vì đã không thể null
.
nullableBool == true
về cơ bản là thử nghiệm cho nullableBool != false && nullableBool != null
(và đây là phần thứ hai làm cho nó hữu ích và do đó không thừa)
nullableBool == true
nếu tôi không tạo ra một trình bao bọc. Nó có thể đọc được vì bạn thường không viết == true
khi sử dụng boolean thông thường như @Flater đề cập, vì vậy nó gợi ý rằng biến này là null. Thông thường, nó cải thiện khả năng đọc LINQ vì bạn không sử dụng nhiều điều kiện null như @Fabio đề cập.