Generic sınıflar ile birlikte default kullanmak oldukça kullanışlı olacaktır. Şöyleki, 400 sutunlu bir tablo üzerinde çalışıyorsunuz ve bu sutunlardan yaklaşık olarak 200'ü NULL veri içeriyor.  Tabloda 100.000 kayıt var ve siz bunları DataReader ile okumak istediniz. SqlCommand ile okuma yaparken sizin hata almamanız için IsDBNull kontrolü yapmanız gerekiyor her satır için. Daha az yazmak için ise biraz reflection'dan yararlanıp tek bir static metot sayesinde bu sorunu giderebilirsiniz. Eğer verimiz null ise o tipin default değerini almak için aşağıdaki gibi bir örnek yapabiliriz.

public static T GetMyValue(SqlDataReader rdr, String column)

        {

            Type type = typeof(T);

            Assembly asm = type.Assembly;

            object obj = asm.CreateInstance(asm.FullName);

            obj = Activator.CreateInstance<T>();

 

            T value = (rdr.IsDBNull(rdr.GetOrdinal(column))) ? (T)obj : (T)rdr[column];

            return value;

        }

Databaseden okuma yaparken ise :

nesne.Özellik = Class<int>.GetMyValue(rdr, "Sutun");

şeklinde bir okuma yaparsanız sorun ortadan kalkar. Yazdığınız static metot sayesinde artık her satırda IsDBNull kontrolü yapmanıza gerek kalmaz. Bu metot sayesinde artık eğer veri null ise size null değil tipin default değeri döner. Bunun daha da kısa yolu nedir diye sorarsanız default kelimesini kullanmaktır.  Şöyleki :

public class IslemYap<T>

{

static T veri = default(T);

public static T DegerOku()

{

return veri;

}

}

Artık reflection da kullanmadan sadece default kelimesinin nimetlerinden yararlanarak bu işlemi kısaca yapabilirsiniz.

DateTime z = IslemYap<DateTime>.DegerOku();

Default kelimesi Generic class ile birlikte kullanıldığında size tipin default değerini döndürmektedir.


 
Comments are closed.