Middle
Care este diferența dintre utilizarea throw și throw ex în C#?
sobes.tech AI
Răspuns de la AI
Atunci când se folosește throw ex, se pierde stiva de apeluri originală a excepției, în timp ce cu throw simplu, aceasta se păstrează.
Exemplu:
using System;
public class Example
{
public static void MethodA()
{
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("Captură în MethodA:");
Console.WriteLine(ex.StackTrace);
throw ex; // Pierdere de informații despre locul apariției excepției
}
}
public static void MethodB()
{
try
{
MethodC();
}
catch (Exception ex)
{
Console.WriteLine("Captură în MethodB:");
Console.WriteLine(ex.StackTrace);
throw; // Păstrarea informațiilor despre locul apariției excepției
}
}
public static void MethodC()
{
throw new InvalidOperationException("Excepție de test");
}
public static void Main(string[] args)
{
Console.WriteLine("Exemplu cu throw ex:");
try
{
MethodA();
}
catch (Exception ex)
{
Console.WriteLine("Captură în Main (de la throw ex):");
Console.WriteLine(ex.StackTrace);
}
Console.WriteLine("\nExemplu cu throw:");
try
{
MethodB();
}
catch (Exception ex)
{
Console.WriteLine("Captură în Main (de la throw):");
Console.WriteLine(ex.StackTrace);
}
}
}
Ieșirea va demonstra diferențele în stiva de apeluri, indicând că throw ex indică locul unde s-a executat throw ex, în timp ce throw indică locul original al excepției (MethodC).
În tabel, principalele diferențe pot fi rezumate astfel:
| Caracteristică | throw ex |
throw |
|---|---|---|
| Stiva de apeluri | Este înlocuită cu cea curentă | Se păstrează (stiva originală) |
| Locul de apariție | Indică locul unde s-a făcut throw ex |
Indică locul original al excepției |
| Utilizare | În principal pentru a schimba tipul excepției sau pentru a adăuga informații (deși nu este o practică recomandată) | Pentru reluarea excepției capturate |