NullReferenceException ne demek, NullReferenceException nasıl çözülür?

alattin (16999) 10 yıl önce sordu

.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


alattin (16999) 10 yıl önce cevapladı

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.

kraziya (15) 7 yıl önce cevapladı

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 7 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.