İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp

C# ArgumentOutOfRangeException – Nedenleri ve Kullanımı

C# ArgumentOutOfRangeException – Nedenleri ve Kullanımı
+ - 0

Merhabalar, C# ArgumentOutOfRangeException – Nedenleri ve Kullanımı dersim ile Exceptions serisine devam ediyorum. Önceki dersim olan C# ArgumentException – Nedenleri ve Kullanımı dersin konusu bu dersin konusu ile bağlantılıdır. ArgumentOutOfRangeException , ArgumentException sınıfından türetilmiş bir hata türüdür.

 

C# ArgumentOutOfRangeException – Nedenleri ve Kullanımı

Devralma :  Object > Exception > SystemException > ArgumentExceptionArgumentOutOfRangeException

C# ArgumentOutOfRangeException – Nedenleri

ArgumentOutOfRangeException , bir bağımsız değişkenin, bir yöntem tarafından belirlenen aralığın dışında olması sonucu ortaya çıkar. Buna örnek vermek gerekirse,  bir string değer içindeki belirli bir index’teki karakterin sayı mı olduğunu bulmak istiyorsunuz diyelim. String değerinin 5 karakter ama siz 6. karakter için bun yöntemi çalıştırdınız. String değerde 6 karakter olmadığı için, yönteme gönderdiğiniz string değer, istediğiniz aralığın dışında kalmış oluyor. Bu durumda ArgumentOutOfRangeException alırız. Örneği aşağıda görelim.

 

        private void btn_ArguOutOfRangeExce_Click(object sender, EventArgs e)
        {
            string s = "1234";
            try
            {
                bool b = Char.IsNumber(s, 5);
            }
            catch (ArgumentOutOfRangeException ex)
            {
                txt_cikti.Text += ex.GetType().Name + ":" + ex.Message;
            }
        }

Burada System.Char.IsNumber() sınıfı, bir string türünde parametre ve bir int türünde parametre alır. İlk parametrede gönderilen string değer içinde, ikinci parametrede gönderilen index değerine bakar ve oradaki karakterin sayı mı olduğunu kontrol eder.

Koda baktığımızda string değerimiz 3 karakterden oluşuyor ama biz 5. indexteki yani 5 . karakterin sayı mı olduğunu soruyoruz. 5. karakter olmadığı için bir istisna dönüyor.

Bu hata ile karşılaşırsanız eğer, örnekte verildiği gibi, kodlarınız boş olan bir index numarasını adresleyip adreslemediğini kontrol edin.

 

C# ArgumentOutOfRangeException – Kullanımı

Nedenini öğrendikten sonra bir de bunu nasıl yöneteceğimizi görelim. Burada bir örnek aklıma gelmediğinden Microsoft’un sitesindeki örneği alıp düzenledim. :) Öncelikle Misafirler adında bir model oluşturuyoruz. ArgumentOutOfRangeException ‘u bu class içerisinde hazırlayacağız.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace mustafabukulmez_com_dersler._000_Classlar
{
    class Misafirler
    {
        private string FirstName;
        private string LastName;
        private int Age;

        public Misafirler(string fName, string lName, int age)
        {
            FirstName = fName;
            LastName = lName;
            if (age < 21)
                throw new ArgumentOutOfRangeException("Yaş;" + Environment.NewLine + "Değer: " + age, "Tüm misafirler 21 yaşında ya da daha büyük olmalıdır.");
            else
                Age = age;
        }

        public string MisafirBilgi()
        {
            string gInfo = FirstName + " " + LastName + ", " + Age.ToString();
            return (gInfo);
        }
    }
}

Kodları incelediğimizde bir Misafir’in 21 yaşından küçük olmamasını istiyoruz. Yani burada bir değer aralığı(!) belirliyoruz. Eğer kayıt edilmek istenen misafir 21 yaşından küçük ise mantıksal olarak ArgumentOutOfRangeException sınırlarına giriyor ve bizde bu türde bir hata verilmesini istiyoruz.

Throw New, satırını incelerseniz, önceki derslerimizden farklı bir ekleme var.

ArgumentOutOfRangeException("Yaş;" + Environment.NewLine + "Değer: " + age, "Tüm misafirler 21 yaşında ya da daha büyük olmalıdır.");

ArgumentOutOfRangeException sınıfı ilk parametre olarak, hataya sebep olan parametre adını göndermemizi istiyor. İkinci parametre olarak da göstermek istediğimiz mesajı istiyor. Biz burada bir akıllılık yaparak, sadece Parametre adını değil, hata veren parametreye gelen değeri de gösterdik. Bu hatanın çıktısı şöyle görünecek;

C# ArgumentOutOfRangeException – Nedenleri ve Kullanımı 2

Ekran görüntüsündeki;

  • İlk satırda göstermek istediğimiz mesajı koyduk. Bunu exception belirlerken yazmıştık.
  • İkinci satırda, gönderdiğimiz parametre adını gösteriyor. Ancak biz buraya sadece parametre adını yazmadığımız için;
  • Üçüncü satırda, bizden istenilen parametre adına, parametreye gelen değeri de ekledik. Alt satırda görünmesi içinde Environment.Newline kullandık.

NOT: Temelde burada istediğiniz her türlü Exception’u kullanabilirsiniz. Yani istersek IndexOutOfRange Exception’u bile kullanabiliriz. Ancak bir takım projesindeysek diğer yazılımcılar tarafından bol bol küfür yiyebilirsiniz. Verdirmek istediğimiz hatanın türü ile ArgumentOutOfRangeException aynı tür olduğundan en doğrusu bunu kullanmak olacaktır.

        #region ArgumentNullException Çıkarma ve Yakalama Örneği
        private void btn_ArguOutOfRangeExce_Click(object sender, EventArgs e)
        {
            try
            {
                _000_Classlar.Misafirler misafir1 = new _000_Classlar.Misafirler("Mustafa", "Bükülmez", 17);
                MessageBox.Show(misafir1.MisafirBilgi());
            }
            catch (ArgumentOutOfRangeException ex)
            {
                txt_cikti.Text += ex.GetType().Name + ":" + ex.Message;
            }

        }


        #endregion

Hazırladığımız Model’e bir kayıt yapmak istiyoruz. Burada gördüğünüz gibi yaş değerini 17 gönderdik. 17 sayısı belirlediğimiz değer aralığı(!) dışında kaldığı için hata alacağız.

Daha fazla bilgiye Microsoft.Docs sitesinden ulaşabilirsiniz.


 

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

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

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

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)