Utrata wyjątku

0

Mam pytanie. Czy wyjątek-2 z programu poniżej, został utracony i jaka zasada tutaj obowiązuje ?

using System;
namespace ConsoleApp19
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Początek programu");
            int[] tablica = new int[10];
            try
            {
                try
                {
                    tablica[10] = 2;
                    Console.WriteLine("Ta instrukcja się nie wykona");
                }
                catch (IndexOutOfRangeException e)
                {
                    Console.WriteLine(e.Message);
                    throw new Exception("Wyjątek-2");
                }
                finally
                {
                    Console.WriteLine("Ta instrukcja wykona się zawsze!");
                    throw new Exception("Wyjątek-3");
                }             
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Console.WriteLine("Koniec programu");
        }
        
    }
}
0

Jeszcze jedno pytanie .
W specyfikacji C# jest taki zapis :
"Jeśli wyjątek jest zgłaszany podczas wykonywania bloku finally i nie jest przechwytywany w obrębie tego bloku,
jest on propagowany do następnej obejmującej instrukcji try. Jeśli kolejny wyjątek występuje w czasie
propagacji, wyjątek ten zostaje utracony."
albo w wersji angielskiej jak ktoś woli :
"If an exception is thrown during execution of a finally block, and is not caught within the same finally block,
the exception is propagated to the next enclosing try statement. If another exception was in the process of being propagated, that exception is lost."

O jaką sytuację tutaj chodzi? Czy ktoś może mi podać jakiś przykład?
Tutaj nie chodzi o taką sytuację jak w moim programie ?

0

Dokładnie chodzi o sytuację z Twojego programu.

0

Tu masz w ogóle pokracznie - catch łapie jeden wyjątek, ale rzuca drugim bez ustawienia InnerException, co spowoduje utratę informacji o źródle problemu.
Wyjątek rzucany w catch zostanie "skolejkowany" aż do momentu, kiedy poprawnie wykona się blok finally. Jednak finally nie wykonuje się poprawnie, bo samo rzuca wyjatkiem. Masz teraz dwa wyjątki - ten z finally i ten "skolejkowany" z catch - co tu zrobić? MS wybrał rzucanie wyjątkiem z finally, przez co ten z catch znika bezpowrotnie.

0

Dzięki za informację wszystkim :)

0

If another exception was in the process of being propagated, that exception is lost."

Jeśli kolejny wyjątek występuje w czasie propagacji, wyjątek ten zostaje utracony."

To nie jest prawidłowe tłumaczenie.

Jeśli inny wyjątek był w trakcie propagacji, wyjątek ten zostanie utracony.

0

Należy ci się 5+ . Teraz to wszystko nabiera sensu! Ja przyznam się bez bicia że korzystałem ze specyfikacji wydanej w języku polskim, przetłumaczonej
przez zawodowego tłumacza, który jak widać nie znał się na programowaniu , Tej angielskiej wersji nie przeczytałem dokładnie, ha ha ha ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1