MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Generarea excepțiilor și operatorul throw

În mod obișnuit, sistemul generează singur excepții în anumite situații, de exemplu, la împărțirea unui număr la zero. Dar limbajul C# permite, de asemenea, generarea manuală a excepțiilor cu ajutorul operatorului throw. Adică, folosind acest operator, putem crea noi înșine o excepție și o putem declanșa în timpul execuției.

De exemplu, în programul nostru se introduce un nume de utilizator, și dorim ca, dacă lungimea numelui este mai mică de 2 caractere, să apară o excepție:

try
{
   Console.Write("Introduceți numele: ");
   string? name = Console.ReadLine();
   if (name == null || name.Length < 2)
   {
       throw new Exception("Lungimea numelui este mai mică de 2 caractere");
   }
   else
   {
       Console.WriteLine($"Numele dvs.: {name}");
   }
}
catch (Exception e)
{
   Console.WriteLine($"Eroare: {e.Message}");
}

După operatorul throw se specifică obiectul excepției, prin al cărui constructor putem transmite mesajul de eroare. Desigur, în loc de tipul Exception, putem folosi obiectul oricărui alt tip de excepții.

Apoi, în blocul catch, excepția generată de noi va fi tratată.

În mod similar, putem genera excepții în orice parte a programului. Există, de asemenea, și o altă formă de utilizare a operatorului throw, în care după acest operator nu se specifică niciun obiect de excepție. În această formă, operatorul throw poate fi utilizat doar în blocul catch:

try
{
   try
   {
       Console.Write("Introduceți numele: ");
       string? name = Console.ReadLine();
       if (name == null || name.Length < 2)
       {
           throw new Exception("Lungimea numelui este mai mică de 2 caractere");
       }
       else
       {
           Console.WriteLine($"Numele dvs.: {name}");
       }
   }
   catch (Exception e)
   {
       Console.WriteLine($"Eroare: {e.Message}");
       throw;
   }
}
catch (Exception ex)
{
   Console.WriteLine(ex.Message);
}

În acest caz, la introducerea unui nume cu lungimea mai mică de 2 caractere, va apărea o excepție care va fi tratată de blocul catch intern. Totuși, deoarece în acest bloc se utilizează operatorul throw, excepția va fi transmisă mai departe către blocul catch extern, care va primi aceeași excepție și va afișa același mesaj pe consolă.

← Lecția anterioară Lecția următoare →