Cách tiếp cận của tôi là làm
(object)item == null
mà tôi đang dựa vào objecttoán tử bình đẳng của riêng mình mà không thể sai. Hoặc phương thức tiện ích mở rộng tùy chỉnh (và quá tải):
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;
}
hoặc để xử lý nhiều trường hợp hơn, có thể là:
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null || obj == DBNull.Value;
}
Ràng buộc ngăn cản IsNullcác kiểu giá trị. Bây giờ nó ngọt ngào như đang gọi
object obj = new object();
Guid? guid = null;
bool b = obj.IsNull(); // false
b = guid.IsNull(); // true
2.IsNull(); // error
có nghĩa là tôi có một phong cách nhất quán / không dễ xảy ra lỗi trong việc kiểm tra các giá trị rỗng trong suốt. Tôi cũng nhận thấy rằng (object)item == nullnó nhanh hơn rất nhiều so với một chútObject.ReferenceEquals(item, null) , nhưng chỉ khi nó quan trọng (tôi hiện đang làm việc trên một cái gì đó mà tôi đã tối ưu hóa mọi thứ!).
Để xem hướng dẫn đầy đủ về cách thực hiện kiểm tra bằng nhau, hãy xem "Phương pháp hay nhất" để so sánh hai trường hợp của một loại tham chiếu là gì?
Assert.IsFalse(foo2 == foo1);