Cách tiếp cận của tôi là làm
(object)item == null
mà tôi đang dựa vào object
toá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 IsNull
cá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 == null
nó 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);