Middle
C# da throw va throw ex ni qanday farq qiladi?
sobes.tech AI
AIdan javob
throw ex dan foydalanilganda, xatolikning asl chaqirish yuki yo'qoladi, throw esa saqlanib qoladi.
Misol:
using System;
public class Example
{
public static void MethodA()
{
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("MethodA'da tutib olish:");
Console.WriteLine(ex.StackTrace);
throw ex; // Xatolik joyi haqida ma'lumot yo'qoladi
}
}
public static void MethodB()
{
try
{
MethodC();
}
catch (Exception ex)
{
Console.WriteLine("MethodB'da tutib olish:");
Console.WriteLine(ex.StackTrace);
throw; // Xatolik joyi haqida ma'lumot saqlanadi
}
}
public static void MethodC()
{
throw new InvalidOperationException("Test xatolik");
}
public static void Main(string[] args)
{
Console.WriteLine("throw ex bilan misol:");
try
{
MethodA();
}
catch (Exception ex)
{
Console.WriteLine("Main'da tutib olish (throw ex):");
Console.WriteLine(ex.StackTrace);
}
Console.WriteLine("\nthrow bilan misol:");
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("Main'da tutib olish (throw):");
Console.WriteLine(ex.StackTrace);
}
}
}
Chiqish, chaqirish yiginidagi farqlarni ko'rsatadi, throw ex throw ex qilinadigan joyni ko'rsatadi, throw esa asl xatolik joyini (MethodC) ko'rsatadi.
Jadvalda asosiy farqlar quyidagicha:
| Xususiyat | throw ex |
throw |
|---|---|---|
| Chaqirish yig'ini | O'zgaradi hozirgi yigin bilan | Saqlanadi (asl yigin) |
| Voqea joyi | throw ex bajarilgan joyni ko'rsatadi |
Asl voqea joyini ko'rsatadi |
| Qo'llanilishi | Asosan xatolik turini o'zgartirish yoki ma'lumot qo'shish uchun (garchi bu eng yaxshi amaliyot bo'lmasa ham) | Olingan xatolikni qayta yuborish uchun |