22 Ağustos 2014 Cuma

C# Nullable Types

 bir c# 2.0 yeniliği olan nullable typeslardan bahsetmek istiyorum..
Veritabanı işlemlerinde çoğu zaman sıkıntı yaratan, değer tipleri (int, bool, ..) için "null" değer gönderememe hikayesini çözen bir yenilik. artık bir değer tipi (value type), hiç bir değer atanmamış (undefined) bir durumda kalabiliyor. eskiden bir ilkel tipimizin illa bir değeri olması gerekiyordu. vermeseniz de ön tanımlı değerini alıyordu.

nullable : varsayılan olarak value type degiskenleri null gecemezsiniz. aldıgınız hatada bu acıkca belirtilir.
ancak yapılan bazı işlemlerde deger yakalama sırasında gelen deger eger null ise projelerimiz patlayabilir. bunu engellemek null gelen deger varsa yerine varsayılan bir degisken atayabilmek için bu tip kullanılır..

"nullable" bir tipi şöyle tanımlıyoruz:

string kelime = null;
int sayim = null;
int? sayim = null;


Bir nullable type değişkeninin değer içerip içermediğini şöyle anlayabiliriz:
if (x.hasvalue)" veya "if (x!=null)" denilerek değer içerip içermediği denetlenebilir.

int? a = null;
object b = a;
return b==null;

satirlarindan true degerini dondurecek reference type taklidi yapabilen strong valued tiptir.

Şöyle bir kullanımda var..

int? a = null;
int defaultval = 10;
console.writeline("anın değeri: " + (a ?? defaultval));
diyelimki "a" değişkenine veritabanından değer gelmedi.. "a" haliyle null kaldı
bunun yerine a ?? yani harbiden null ise defautval değişkeninin değerini göster demek oluyor..
bir nevi bir patlama gerçekleşmemesi için kod sigortası..

tabi bunu şöylede yapabilirdik..

getvalueordefault() methodu degiskenin uzerinde deger varsa onu al yoksa varsayılan atamam yap..
int ugurlusayi = gelenID.GetValueOrDefault(5);

Buda generic hali:
Nullable gelenID = new Nullable();

Ayrıca DBNull.Value diye birşey vardırki bu parametre ile db den gelen nesnenin null olup olmadığını
kontrol etme amacı ile kullanılır.
if(DBNull.Value!= datarow["alanadi"])
gibisinden..

Hiç yorum yok:

Yorum Gönder