Sobes.tech
Middle

რა განსხვავებაა C#-ში throw და throw ex-ის გამოყენებას შორის?

sobes.tech AI

პასუხი AI-სგან

როდესაც იყენებთ throw ex, იკარგება ორიგინალური გამოძახების ბლოკი, ხოლო როდესაც უბრალოდ throw გამოიყენება, ის ინახება.

მაგალითი:

using System;

public class Example
{
    public static void MethodA()
    {
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("MethodA-ში დამუშავება:");
            Console.WriteLine(ex.StackTrace);
            throw ex; // იკარგება გამონაკლისის წარმოშობის ადგილი
        }
    }

    public static void MethodB()
    {
        try
        {
            MethodC();
        }
        catch (Exception ex)
        {
            Console.WriteLine("MethodB-ში დამუშავება:");
            Console.WriteLine(ex.StackTrace);
            throw; // ინახება გამონაკლისის წარმოშობის ინფორმაცია
        }
    }

    public static void MethodC()
    {
        throw new InvalidOperationException("ტესტი გამონაკლისი");
    }

    public static void Main(string[] args)
    {
        Console.WriteLine("`throw ex` მაგალითი:");
        try
        {
            MethodA();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Main-ში დამუშავება (`throw ex`)-დან:");
            Console.WriteLine(ex.StackTrace);
        }

        Console.WriteLine("\n`throw` მაგალითი:");
        try
        {
            MethodB();
        }
        catch (Exception ex)
        {
            Console.WriteLine("Main-ში დამუშავება (`throw`)-დან:");
            Console.WriteLine(ex.StackTrace);
        }
    }
}

გამომავალი აჩვენებს გამოძახების ბლოკების განსხვავებებს, სადაც throw ex მიუთითებს იმ ადგილას, სადაც შესრულდა throw ex, ხოლო throw მიუთითებს თავდაპირველ ადგილას, სადაც გამონაკლისი წარმოიშვა (MethodC).

შეგვიძლია განვათავსოთ ძირითადი განსხვავებები:

მახასიათებელი throw ex throw
გამოძახების ბლოკი იცვლება მიმდინარე გამოძახების ბლოკით ინახება (მთავარი გამოძახების ბლოკი)
წარმოშობის ადგილი მიუთითებს იმ ადგილას, სადაც შესრულდა throw ex მიუთითებს თავდაპირველ ადგილას, სადაც გამონაკლისი წარმოიშვა
გამოყენება ძირითადად — ტიპის შეცვლა ან დამატებითი ინფორმაცია დამატება (ეს არ არის საუკეთესო პრაქტიკა) გამონაკლისის ხელახალი წარმოქმნა