Pendekatan saya adalah melakukan
(object)item == null
di mana saya mengandalkan object
operator kesetaraan sendiri yang tidak bisa salah. Atau metode ekstensi khusus (dan kelebihan beban):
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null;
}
public static bool IsNull<T>(this T? obj) where T : struct
{
return !obj.HasValue;
}
atau untuk menangani lebih banyak kasus, mungkin:
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null || obj == DBNull.Value;
}
Batasan mencegah IsNull
jenis nilai. Sekarang semanis menelepon
object obj = new object();
Guid? guid = null;
bool b = obj.IsNull(); // false
b = guid.IsNull(); // true
2.IsNull(); // error
yang berarti saya memiliki satu gaya konsisten / tidak-rawan kesalahan dalam memeriksa nulls di seluruh. Saya juga telah menemukan(object)item == null
sangat sangat sangat sedikit lebih cepat daripadaObject.ReferenceEquals(item, null)
, tetapi hanya jika itu penting (saya saat ini sedang mengerjakan sesuatu di mana saya telah mengoptimalkan mikro semuanya!).
Untuk melihat panduan lengkap tentang penerapan pemeriksaan kesetaraan, lihat Apa itu "Praktik Terbaik" Untuk Membandingkan Dua Contoh dari Jenis Referensi?
Assert.IsFalse(foo2 == foo1);