Anda sedang menulis ekspresi boolean yang mungkin terlihat seperti ini:
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; }
}
... dan Anda mendapatkan kesalahan:
Operator '&&' tidak dapat diterapkan ke operan tipe 'bool' dan 'bool?'
Apa cara optimal / terbersih untuk menanganinya?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet ?? false)
Apakah itu benar-benar dapat dibaca?
team.Category == "A Team" && (team?.Manager?.IsVietnamVet).GetValueOrDefault()
Ini mungkin tidak berfungsi di LINQ-to-Entities ...
team.Category == "A Team" && team?.Manager?.IsVietnamVet == true
Apakah Anda benar-benar menulis
if (condition == true)
tanpa ragu-ragu?
Apakah ada opsi lain? Apakah akhirnya lebih baik menulis:
team.Category == "A Team" && team.Manager != null && team.Manager.IsVietnamVet
team.Manager?.IsVietnamVet
, yaitu tidak ada kondisional nol setelah team
, karena sudah tidak bisa null
.
nullableBool == true
pada dasarnya sedang menguji nullableBool != false && nullableBool != null
(dan ini bagian kedua yang membuatnya berguna dan karenanya tidak berlebihan)
nullableBool == true
jika saya tidak membuat pembungkus. Ini dapat dibaca karena Anda biasanya tidak menulis == true
ketika menggunakan boolean biasa seperti @Flater menyebutkan, jadi itu menunjukkan bahwa variabel tersebut dapat dibatalkan. Secara tradisional, ini meningkatkan keterbacaan LINQ karena Anda tidak menggunakan beberapa kondisi null sebagai @Fabio menyebutkan.