2012-02-08 19 views
8

Yani, bir uygulamada çok fazla veritabanı çalışması yapıyorum - ve önbelleğe alma sistemimin birkaç olası dönüş değeri vardır. Sıfırdan dönebilir, bir varsayılan (tip) döndürebilir veya geçersiz bir nesneyi (geçersiz nesneye göre, yanlış özelliklere/değerlere sahip bir tane) döndürebilir. Benim derleyici if (obj == default(T)) hep yanlış olacak bana anlatıyor,Null denetleme uzantısı yöntemi

public static bool Valid<T> (this T obj) where T: class 
    { 
     if (obj == null) 
      return false; 
     else if (obj == default(T)) 
      return false; 
     //Other class checks here 
     else 
      return true; 
    } 

sorundur: Öyle gibi, benim için tüm bu kontrolleri yapmak için bir uzantısı yöntemi oluşturmak istiyorum.

Neden? Eğer bir "sınıf" kısıtlamayı (where T: class) sahip olduğundan

+0

Size derleyici hatası veriyor veya uyarıyor mu? Ben de almıyorum. iyi derler. –

+3

@GregB. Muhtemelen 'resharper' bu ona bir ipucu verir ... – gdoron

+0

@GregB evet, yeniden sağladım. – caesay

cevap

21

, default(T) null eşit daima olduğunu. Zaten orjinal if deyiminde bunun için bir çekiniz var, bu nedenle ikinci durumda (obj == default(T)) asla doğru olamaz.

0

vermeniz gereken ilk karar şu: int gibi Can T olmak bir değer türü?
T Eğer kısıtlayıcı eğer

if (obj == null) return false; 
1

emin değilim kaldırabilirsiniz bir başvuru türü her zaman ise,

where T: class 

ve

if (obj == null) return false; 
else 

kaldırabilir Eğer öyleyse Bunu yapmak istersiniz, çünkü istersiniz ya da zorunda olduğunuzu hissedersiniz. seçiminiz sınıf yalnızca kasıtlı bunu sınırlamak veya bir iş durumu için, bu öneriyi göz ardı çekinmeyin Eğer

public static bool Valid<T> (this T obj) 
{ 
    return !EqualityComparer<T>.Default.Equals(obj, default(T)); 
} 

: Bu ikincisi ise, burada karmaşık ve basit türleri üzerinde kontrol varsayılan değer yapmak için bir yoldur . Bunun hesaba katmayacağı bir diğer konu ise basit tiplerin boks edilmesidir (bu günlerde bu kodun çalıştığı nullable basit tipler kullanmamıza rağmen).

İlgili konular