C# NullReferenceException – Nedenleri ve Kullanımı

C# NullReferenceException – Nedenleri ve Kullanımı

26 Ocak 2020 2 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 86
Yaklaşık okuma süresi : 6 DK
C# OutOfMemoryException Nedenleri
Microsoft Jet OLEDB 4 0 Sağlayıcısı Yerel Makine Hatası Çözümü

Merhabalar, C# NullReferenceException – Nedenleri ve Kullanımı dersim ile C# eğitim setime ve Exceptions derslerime devam ediyorum. Önceki Exceptions dersimde C# IOException Nedir? IOException İşlemleri konusuna değinmiştik. Bu dersimizde ise çok sık karşılaştığımız bir özel durum olan C# NullReferenceException konusunda değineceğiz.

C# NullReferenceException – Nedenleri ve Kullanımı

Devralma :  Object > Exception > SystemException >NullReferenceException

C# NullReferenceException – Nedenleri

NullReferenceException, Null olmaması gereken bir değer ile  işlem yapılmaya çalışıldığında alınan bir özel durumdur. Bu özel durum ile sık sık karşılaşırız. Sık sık karşılatığımız gibi belki de yüzlerce farklı şekilde ortaya çıkabilmektedir.

NOT: Bu özel durumların çıkma sebebini anladığımızda çözüm müdahelesi daha kolay olacaktır.

Benim sık sık karşılaştığım çıkma şekli;

Bir gridview’de bir sorgu gösterdiğimde ve grid doldurma kodlarını başka bir formdan kopyalayarak aldığım için stun gizleme işlemi varsa ve bu stun verdiğim sorguda yok ise bu stun gizleme kod satırından NullReferenceException özel durumu alıyorum. Çünkü stun gizleme kodundaki ilgili stun gridview’de yer almıyor oluyor. Yani gridview ‘de stun gizlemek istiyorsunuz ama o stun gridvew’de  yer almıyor.

Bu özel durumun ortaya çıkmasına neden olan şey neredeyse tamamen geliştiricinin yaptığı hatalardan dolayıdır. Yani kodlardaki bir hatadan dolayı ortaya çıkan bir özel durumdur.

Aşağıdaki örneği çalıştırdığımızda da ilgili özel durumu alırız.

int[] values = null;
       for (int ctr = 0; ctr <= 9; ctr++)
          values[ctr] = ctr * 2;
          
       foreach (var value in values)
          Console.WriteLine(value);

values ArrayList’in null olması ve içinde hiçbir değerin olmadığı bir ArrayList üzerinden bir döngüsel işlem yapmaya çalıştığımız için NullReferenceException  özel durumu ortaya çıkar. Bu örnekte karşımıza çıkacak olan özel durum geliştiricinin bu özel durumun oluşacağını bilememesinden dolayıdır. Yani yine geliştirici hatasıdır. Bu örnek aşağıdaki gibi olmak zorundadır.

 int[] values = new int[10];
       for (int ctr = 0; ctr <= 9; ctr++)
          values[ctr] = ctr * 2;
          
       foreach (var value in values)
          Console.WriteLine(value);

Örnekte gördüğünüz gibi values ArrayList’inin 10 değer alabileceğini belirttik ve döngüye soktuğumuzda bir özel durum almadık.

İlgili İçerik  C# Fibonacci Dizisi Yapımı

Bir NullReferenceException  özel durumunu işlemek (Try Catch) yerine özel durumu sebep olan kodları düzeltmek daha önemlidir. Eğer kod işleyişine bir engel teşkil etmiyorsa ya da çalışmasa da olur gibi bir işlem ise NullReferenceException  özel durumunu işleyebilirsiniz.

C# NullReferenceException – Kullanımı

NullReferenceException kullanımına gelirsek, null olmasını istemediğiniz bir değerin null girilmesi durumunda ele alabilirsiniz. Kullanım örneklerini önceki Exceptions derslerimde bulabilirsiniz. Temel olarak her türlü kullanım konusu aynıdır. Aşağıda basit bir örnek görebilirsiniz.

 #region NullReferenceException Çıkarma ve Yakalama Örneği
        private void btn_NullReferenceException_Click(object sender, EventArgs e)
        {
            string disaridan_alinan_deger = null;
            try
            {
                yapilacak_islem(disaridan_alinan_deger);
            }
            catch (NullReferenceException ex)
            {
                txt_cikti.Text += ex.GetType().Name + ":" + ex.Message;
            }
        }
        string yapilacak_islem(string s)
        {
            if (s == null)
            {
                throw new NullReferenceException("XXX Değeri boş bir değer olamaz. Bir değer girmek zorundasınız.");
            }
            else
            {
                // islemler
                return s;
            }
        }
        #endregion

Örnekte gördüğünüz gibi boş olmasını istemediğiniz bir değer var ise NullReferenceException özel durum verilmesini isteyebilirsiniz.

Bu özel durumları kullanmanın en büyük avantajı bir dll oluşturmak istediğinizde dll kullanımında ortaya çıkabilecek hataları mantıklı geri dönüşler ile dll i kullanan kişileri doğru yönlendirebilirsiniz.


C# NullReferenceException – Nedenleri ve Kullanımı dersimiz de bu kadardı arkadaşlar.

Tüm Exceptions derslerime bağlantıdan ulaşabilirsiniz.

Daha fazla detay için Microsoft.Docs sitesinde bakabilirsiniz.

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.

Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersim Github projemde yerini almıştır. Tüm Exception adı altında eklediğim dersleri Github projeme ekleyeceğim.

Sağlıcakla ve takipte kalın. 😉

C# OutOfMemoryException Nedenleri
Microsoft Jet OLEDB 4 0 Sağlayıcısı Yerel Makine Hatası Çözümü