C# istisnolar
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‘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.
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.
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!
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
