Sobes.tech
Middle

C#-da throw və throw ex istifadə arasında nə fərq var?

sobes.tech Süni İntellekt

AI-dan cavab

throw ex istifadə edildikdə, istisnanın orijinal çağrı yığını itirədir, throw isə saxlanılır.

Nümunə:

using System;

public class Example
{
    public static void MethodA()
    {
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("MethodA'da tutma:");
            Console.WriteLine(ex.StackTrace);
            throw ex; // İstisna yerinin məlumatı itir
        }
    }

    public static void MethodB()
    {
        try
        {
            MethodC();
        }
        catch (Exception ex)
        {
            Console.WriteLine("MethodB'da tutma:");
            Console.WriteLine(ex.StackTrace);
            throw; // İstisna yerinin məlumatı saxlanılır
        }
    }

    public static void MethodC()
    {
        throw new InvalidOperationException("Test istisnası");
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("throw ex ilə nümunə:");
        try
        {
            MethodA();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Main'da tutma (throw ex):");
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine("\nthrow ilə nümunə:");
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Main'da tutma (throw):");
            Console.WriteLine(ex.StackTrace);
        }
    }
}

Çıxış, çağrı yığını arasındakı fərqləri göstərəcək və throw ex-in throw ex yerində, throw-un isə orijinal istisna yerində (MethodC) olduğunu göstərəcək.

Əsas fərqlər aşağıdakı cədvəldə ümumiləşdirilə bilər:

Xüsusiyyət throw ex throw
Çağrı yığını Cari yığın ilə əvəz olunur Saxlanılır (orijinal yığın)
İstisna yeri throw ex-in yerini göstərir Orijinal istisna yerini göstərir
İstifadə Əsasən istisna növünü dəyişdirmək və ya məlumat əlavə etmək üçün (bu ən yaxşı praktika deyil) Yığılmış istisnanı yenidən atmaq üçün