.Net ortamında C#, Vb.Net gibi dillerle kod yazarken pek çok kişinin karşılaştığı hatalardan birisi de NullReferenceException yani Object reference not set to an instance of an object hatasıdır.
Peki NullReferenceException Object reference not set to an instance of an object hatası nedir, Object reference not set to an instance of an object hatası nasıl çözülür?
Toplam 2 cevap
NullReferenceException hatasının temel sebebi yaratılmamış bir nesneye değer atama veya değer okumaya çalışmaktır.
Örneğin Uye turunde u1 adında bir nesne olduğunu düşünün. Aşağıdaki örnekte NullReferenceException hatası alınır.
Uye u1=null; u1.Ad = "uzmanim.net"; // NullReferenceException hatası verir.
Aşağıdaki örnekte NullReferenceException hatası alınmaz
Uye yeniUye = new Uye(); yeniUye.Ad = "uzmanim.net";
Yukarıdaki örnekte Uye sınıfından yeniUye adında bir nesne oluşturuluyor.
Basit
string kelime = null; int uzunluk = kelime.Length
kelime null'dur. Bu sebepten kelime içerisinde uzunluğunu öğrenebileceğiniz bir string ifade yoktur.
Dolaylı
public class Kisi { public int Yas { get; set; } } public class Kitap { public Kisi Yazar { get; set; } } Kitap k1 = new Kitap(); int yazarYas = k1.Yazar.Yas;
Yukarıdaki örnekte Kitap türünde yeni bir nesne oluşturuldu fakat k1 içerisindeki Yazar özeliğine bir başlangıç değeri atanmadı. Yani yaşı alınacak bir Kisi yok.
Dizi (Array)
int[] sayilar = null; int n = sayilar[0]; // sayi null. indeksi 0 olan bir eleman yok.
Yukarıdaki örnekte NullReferenceException hatası verir.
Asp.Net içerisinde hatası ile en çok şu durumlarda karşılaşılır:
Asp.Net sayfasının yaşam döngüsü sonlandığında
public partial class Sayfa : System.Web.UI.Page { protected Kisi yeniKisi; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { yeniKisi = new Kisi(); // Sayfa yüklendiğinde çalışır. Buton tıklandığında çalışmaz. } } protected void KaydetButon_Click(object sender, EventArgs e) { yeniKisi.Ad = "Ad özelliğine erişmek istediğinizde NullReferenceException döner. Çünkü Page Load içerisindeki örnek artık erişilemezdir."; } }
Asp.Net Session değer atanmadığında veya değeri artık geçersiz olduğunda
string Ad = Session["Ad"].ToString();
Session'a değer atanmadıysa veya Session timeout olduysa NullReferenceException hatası dönecektir.
Bu hata ile karşılaşıldığında 404 page found gibi bir hata ekranı gösstermemiz mümkünmü peki ?
Yani bu hatanın bir status kodu varmıdır hocam ?
alattin 8 yıl önce
404, 500 gibi kodlar HTTP durum kodlarıdır. Null Reference Exception bu şekilde yakalanamaz. Try catch blogu ile yakalayıp istediğiniz yönlendirmeyi yapabilirsiniz.