Benim yaklaşımım yapmak
(object)item == null
Bunun üzerine object
kendi eşitlik operatörüne güveniyorum ki bu yanlış gidemez. Veya özel bir uzantı yöntemi (ve bir aşırı yükleme):
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;
}
veya daha fazla vakayı ele almak için şunlar olabilir:
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null || obj == DBNull.Value;
}
Kısıtlama IsNull
, değer türlerini engeller . Şimdi çağırmak kadar tatlı
object obj = new object();
Guid? guid = null;
bool b = obj.IsNull(); // false
b = guid.IsNull(); // true
2.IsNull(); // error
Bu, baştan sona null değerleri kontrol etmek için tutarlı / hataya eğilimli olmayan bir tarzım olduğu anlamına geliyor. Ayrıca, (object)item == null
daha hızlı olduğunuObject.ReferenceEquals(item, null)
da buldum , ancak yalnızca önemliyse (şu anda her şeyi mikro optimize etmem gereken bir şey üzerinde çalışıyorum!).
Eşitlik kontrollerinin uygulanmasına ilişkin eksiksiz bir kılavuz görmek için bkz . Bir Referans Türünün İki Örneğini Karşılaştırmak İçin "En İyi Uygulama" Nedir?
Assert.IsFalse(foo2 == foo1);