C# istisnolar


ULASHISH

C# istisnolar

C# kodini bajarishda turli xatolar yuz berishi mumkin: dasturchi yo‘l qo‘ygan kod xatolari, noto‘g‘ri kiritilgan ma’lumotlar sababli xatolar yoki boshqa oldindan ko‘rib bo‘lmaydigan holatlar.

Xato yuz berganda C# odatda to‘xtaydi va xato xabarini hosil qiladi. Buning texnik atamasi: C# istisno (exception) tashlaydi (xato tashlaydi).


C# try va catch

try operatori bajarilish vaqtida xatolarga tekshiriladigan kod blokini aniqlash imkonini beradi.

catch operatori try blokida xato yuz bersa, bajariladigan kod blokini aniqlash imkonini beradi.

try va catch kalit so‘zlari juft bo‘lib keladi:

Sintaksis

try 
{
  //  Block of code to try
}
catch (Exception e)
{
  //  Block of code to handle errors
}

Uchta butun sondan iborat massiv yaratadigan quyidagi misolni ko‘rib chiqing:

Bu xatoga olib keladi, chunki myNumbers[10] mavjud emas.

int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!

Xato xabari taxminan quyidagicha bo‘ladi:

System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'

Xato yuz bersa, uni ushlash va uni qayta ishlaydigan kodni bajarish uchun try...catch’dan foydalanishimiz mumkin.

Quyidagi misolda catch blokidagi o‘zgaruvchidan (e) istisnoni tavsiflovchi xabarni chiqaradigan o‘rnatilgan Message xususiyati bilan birga foydalanamiz:

Misol

try
{
  int[] myNumbers = {1, 2, 3};
  Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
  Console.WriteLine(e.Message);
}

Natija quyidagicha bo‘ladi:

Index was outside the bounds of the array.
O‘zingiz sinab ko‘ring »

O‘zingizning xato xabaringizni ham chiqarishingiz mumkin:

Misol

try
{
  int[] myNumbers = {1, 2, 3};
  Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
  Console.WriteLine("Something went wrong.");
}

Natija quyidagicha bo‘ladi:

Something went wrong.
O‘zingiz sinab ko‘ring »


finally operatori

finally operatori natijadan qat’i nazar, try...catch’dan keyin kodni bajarish imkonini beradi:

Misol

try
{
  int[] myNumbers = {1, 2, 3};
  Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
  Console.WriteLine("Something went wrong.");
}
finally
{
  Console.WriteLine("The 'try catch' is finished.");
}

Natija quyidagicha bo‘ladi:

Something went wrong.
The 'try catch' is finished.
O‘zingiz sinab ko‘ring »

throw kalit so‘zi

throw operatori o‘zingizning (maxsus) xatoingizni yaratish imkonini beradi.

throw operatori istisno sinfi bilan birga ishlatiladi. C# da ko‘plab istisno sinflari mavjud: ArithmeticException, FileNotFoundException, IndexOutOfRangeException, TimeOutException va h.k.:

Misol

static void checkAge(int age)
{
  if (age < 18)
  {
    throw new ArithmeticException("Access denied - You must be at least 18 years old.");
  }
  else
  {
    Console.WriteLine("Access granted - You are old enough!");
  }
}

static void Main(string[] args)
{
  checkAge(15);
}

Dasturda ko‘rsatiladigan xato xabari quyidagicha bo‘ladi:

System.ArithmeticException: 'Access denied - You must be at least 18 years old.'

Agar age 20 bo‘lganida, istisno yuz bermagan bo‘lardi:

Misol

checkAge(20);

Natija quyidagicha bo‘ladi:

Access granted - You are old enough!
O‘zingiz sinab ko‘ring »


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!