Tworzenie własnego wyjątku c#

0

Witam,
Mam problem z tworzeniem własnego wyjątku w C#. Po mimo że dałem ograniczenia jeśli użyje liczby z poza zakresu wywaka mi program. Nie mam niestety pomysłów...


    class Wyjatki : Exception
    {
        public static string sprawdzanieOpcjiWyboruUzytkownika(int wybor, int ograniczenie)
        {
            if ((wybor < ograniczenie) && (wybor > 0))
            {
                return "Poprawna opcja.";
            }
            else
            {
                Exception ZlaOpcjaMenu;
                ZlaOpcjaMenu = new Exception("Wybrano nieistniejącą opcje w menu, wybierz ponownie:");
                throw ZlaOpcjaMenu;

            }
        }
    }

Użycie wyjątku:

char opcja = '0';

            //wyjatek
            try
            {
                opcja = char.Parse(Console.ReadLine());
                Console.WriteLine(Wyjatki.sprawdzanieOpcjiWyboruUzytkownika(opcja));
            }
            catch (Wyjatki z)               //Obsluga wygenerowanego wyjątku
            {
                Console.WriteLine(z.Message.ToString());

            }
3

Bo źle to robisz - klasa wyjątku nie ma sama rzucać wyjątków (wtf), powinna być rzucana. Sprawdzanie można wyciągnąć do osobnej funkcji. Inaczej mówiąc, powinna wyglądać raczej tak:

class InvalidOptionException : Exception
{
    public InvalidOptionException(string message)
        : base("Invalid user option: " + message) { }
}

class Program
{
    static void Validate(int input)
    {
        if (input < 0 || input > 3)
        {
            throw new InvalidOptionException("You must be joking");
            // i tak niezbyt ładne, bo wyjątek tutaj nieszczególnie pasuje
            // ja bym po prostu zwracał boola z tej funkcji
        }
    }

    static void Main(string[] args)
    {
        int input = Console.Read() - '0';
        try
        {
            Validate(input);
            Console.WriteLine("OK");
        }
        catch (InvalidOptionException e)
        {
            Console.WriteLine("Oops: {0}", e.Message);
        }
        finally
        {
            Console.WriteLine("Cya");
        }
    }
}
0

Zwróć uwagę co rzucasz:

 new Exception

a co łatpiesz

catch (Wyjatki z)

Zdaj sobie sprawę, że rzucany wyjątek musi być tego samego typu (lub pochodnego) co łapany. Czy Exception dziedziczy po Wyjatki? Raczej nie.

0

W praktyce, jak podaje literatura, lepiej sprawdza się wyprowadzenie własnego wyjątku z typu System.ApplicationException

0

Wygląda, że dobrze prawisz MSM... niestety z braku czasu już 4 lata zabieram się za pewne sprawy stąd moje spóźnienie w tym temacie.
Źródła wskazują, że ApplicationException jest bezużyteczne, czego nie miałem okazji doświadczyć w praktyce... Thx za uwagę!

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