Sobes.tech
Middle

Mi a különbség a throw és a throw ex használata között C#-ban?

sobes.tech MI

Válasz az MI-től

Amikor throw ex-t használunk, az eredeti kivétel hívási verem elveszik, míg a sima throw esetén megmarad.

Példa:

using System;

public class Example
{
    public static void MethodA()
    {
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Elfogás MethodA-ban:");
            Console.WriteLine(ex.StackTrace);
            throw ex; // Az információ elveszik a kivétel helyéről
        }
    }

    public static void MethodB()
    {
        try
        {
            MethodC();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Elfogás MethodB-ben:");
            Console.WriteLine(ex.StackTrace);
            throw; // A kivétel eredeti helyének megőrzése
        }
    }

    public static void MethodC()
    {
        throw new InvalidOperationException("Teszt kivétel");
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("Példa throw ex-szel:");
        try
        {
            MethodA();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Elfogás Main-ben (throw ex-től):");
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine("\nPélda throw-val:");
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Elfogás Main-ben (throw-tól):");
            Console.WriteLine(ex.StackTrace);
        }
    }
}

A kimenet megmutatja a hívási verem különbségeit, jelezve, hogy a throw ex a throw ex végrehajtásának helyét mutatja, míg a throw az eredeti kivétel helyét (MethodC).

A táblázat összefoglalja a fő különbségeket:

Jellemző throw ex throw
Hívási verem Felülíródik a jelenlegi veremmel Megmarad (eredeti verem)
Eredeti hely Megmutatja, hol hajtották végre a throw ex Megmutatja az eredeti kivétel helyét
Alkalmazás Főként a kivétel típusának módosítására vagy információk hozzáadására (bár ez nem a legjobb gyakorlat) A kivétel újrafeldolgozására használják