Middle
C#-da throw və throw ex istifadə arasında nə fərq var?
sobes.tech Süni İntellekt
AI-dan cavab
throw ex istifadə edildikdə, istisnanın orijinal çağrı yığını itirədir, throw isə saxlanılır.
Nümunə:
using System;
public class Example
{
public static void MethodA()
{
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("MethodA'da tutma:");
Console.WriteLine(ex.StackTrace);
throw ex; // İstisna yerinin məlumatı itir
}
}
public static void MethodB()
{
try
{
MethodC();
}
catch (Exception ex)
{
Console.WriteLine("MethodB'da tutma:");
Console.WriteLine(ex.StackTrace);
throw; // İstisna yerinin məlumatı saxlanılır
}
}
public static void MethodC()
{
throw new InvalidOperationException("Test istisnası");
}
public static void Main(string[] args)
{
Console.WriteLine("throw ex ilə nümunə:");
try
{
MethodA();
}
catch (Exception ex)
{
Console.WriteLine("Main'da tutma (throw ex):");
Console.WriteLine(ex.StackTrace);
}
Console.WriteLine("\nthrow ilə nümunə:");
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("Main'da tutma (throw):");
Console.WriteLine(ex.StackTrace);
}
}
}
Çıxış, çağrı yığını arasındakı fərqləri göstərəcək və throw ex-in throw ex yerində, throw-un isə orijinal istisna yerində (MethodC) olduğunu göstərəcək.
Əsas fərqlər aşağıdakı cədvəldə ümumiləşdirilə bilər:
| Xüsusiyyət | throw ex |
throw |
|---|---|---|
| Çağrı yığını | Cari yığın ilə əvəz olunur | Saxlanılır (orijinal yığın) |
| İstisna yeri | throw ex-in yerini göstərir |
Orijinal istisna yerini göstərir |
| İstifadə | Əsasən istisna növünü dəyişdirmək və ya məlumat əlavə etmək üçün (bu ən yaxşı praktika deyil) | Yığılmış istisnanı yenidən atmaq üçün |