Sobes.tech
Middle

Kuo skiriasi throw ir throw ex naudojimas C#?

sobes.tech AI

Atsakymas iš AI

Kai naudojate throw ex, prarandamas pradinio išimties iškvietimo šakos, o naudojant paprastą throw, ji išlieka.

Pavyzdys:

using System;

public class Example
{
    public static void MethodA()
    {
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("MethodA apdorojimas:");
            Console.WriteLine(ex.StackTrace);
            throw ex; // prarandama informacija apie išimties atsiradimo vietą
        }
    }

    public static void MethodB()
    {
        try
        {
            MethodC();
        }
        catch (Exception ex)
        {
            Console.WriteLine("MethodB apdorojimas:");
            Console.WriteLine(ex.StackTrace);
            throw; // išsaugoma informacija apie išimties atsiradimo vietą
        }
    }

    public static void MethodC()
    {
        throw new InvalidOperationException("Testinė išimtis");
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("Pavyzdys su throw ex:");
        try
        {
            MethodA();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Gaunama Main'e (iš `throw ex`):");
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine("\nPavyzdys su throw:");
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Gaunama Main'e (iš `throw`):");
            Console.WriteLine(ex.StackTrace);
        }
    }
}

Išvestis demonstruos iškvietimo šakų skirtumus, rodančius, kad throw ex nurodo vietą, kur buvo atliktas throw ex, o throw nurodo pradinę išimties atsiradimo vietą (MethodC).

Lentelėje galima pateikti pagrindinius skirtumus:

Savybė throw ex throw
Iškvietimo šakos Pakeičia į dabartinę iškvietimo šaką Išlieka (pradinė iškvietimo šaka)
Atsiradimo vieta Nurodo vietą, kur buvo atliktas throw ex Nurodo pradinę vietą, kur įvyko išimtis
Naudojimas Pagrindinis — keisti išimties tipą ar pridėti informaciją (nors tai nėra geriausia praktika) Pakartotinai generuoti pertrauktą išimtį