Sobes.tech
Middle

Jaký je rozdíl mezi použitím throw a throw ex v C#?

sobes.tech AI

Odpověď od AI

Při použití throw ex se ztrácí původní zásobník volání výjimky, zatímco při použití prostého throw zůstává zachován.

Příklad:

using System;

public class Example
{
    public static void MethodA()
    {
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Zachycení v MethodA:");
            Console.WriteLine(ex.StackTrace);
            throw ex; // Ztráta informací o místě výskytu výjimky
        }
    }

    public static void MethodB()
    {
        try
        {
            MethodC();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Zachycení v MethodB:");
            Console.WriteLine(ex.StackTrace);
            throw; // Zachování informací o místě výskytu výjimky
        }
    }

    public static void MethodC()
    {
        throw new InvalidOperationException("Testovací výjimka");
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("Příklad s throw ex:");
        try
        {
            MethodA();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Zachycení v Main (od throw ex):");
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine("\nPříklad s throw:");
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Zachycení v Main (od throw):");
            Console.WriteLine(ex.StackTrace);
        }
    }
}

Výstup ukáže rozdíly ve zásobníku volání, přičemž throw ex ukazuje místo, kde bylo provedeno throw ex, zatímco throw ukazuje původní místo výskytu výjimky (MethodC).

Tabulka shrnuje hlavní rozdíly:

Vlastnost throw ex throw
Zásobník volání Nahrazen aktuálním zásobníkem Zachován (původní zásobník)
Místo výskytu Ukazuje místo, kde bylo provedeno throw ex Ukazuje původní místo výskytu výjimky
Použití Převážně k změně typu výjimky nebo přidání informací (ačkoliv to není nejlepší praxe) Pro opětovné vyvolání zachycené výjimky