Middle
C#'ta throw ve throw ex kullanımı arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
throw ex kullanılırken, orijinal istisna çağrı yığını kaybolur, oysa sadece throw kullanıldığında korunur.
Örnek:
using System;
public class Example
{
public static void MethodA()
{
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("MethodA'da yakalama:");
Console.WriteLine(ex.StackTrace);
throw ex; // İstisna konum bilgisi kaybolur
}
}
public static void MethodB()
{
try
{
MethodC();
}
catch (Exception ex)
{
Console.WriteLine("MethodB'da yakalama:");
Console.WriteLine(ex.StackTrace);
throw; // İstisna konumu bilgisi korunur
}
}
public static void MethodC()
{
throw new InvalidOperationException("Test istisnası");
}
public static void Main(string[] args)
{
Console.WriteLine("throw ex ile örnek:");
try
{
MethodA();
}
catch (Exception ex)
{
Console.WriteLine("Main'de yakalama (throw ex):");
Console.WriteLine(ex.StackTrace);
}
Console.WriteLine("\nthrow ile örnek:");
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("Main'de yakalama (throw):");
Console.WriteLine(ex.StackTrace);
}
}
}
Çıktı, çağrı yığındaki farkları gösterecek ve throw ex'in throw ex ifadesinin yapıldığı yeri gösterdiğini, throw'un ise orijinal istisna konumunu (MethodC) gösterdiğini ortaya koyacaktır.
Tabloda temel farklar özetlenebilir:
| Özellik | throw ex |
throw |
|---|---|---|
| Çağrı Yığını | Mevcut yığın ile değiştirilir | Korunur (orijinal yığın) |
| Oluşum yeri | throw ex ifadesinin yapıldığı yer |
Orijinal istisna yeri |
| Kullanım | Genellikle istisna türünü değiştirmek veya bilgi eklemek için (bu en iyi uygulama değildir) | Yakalanan istisnayı yeniden fırlatmak için |