try/catch/finally, throw new a ponowne zgłaszanie
Proszę używać try/catch/finally do przewidywalnej obsługi błędów, zrozumieć różnicę między throw new a ponownym zgłaszaniem oraz utrzymywać przykłady małe i skupione.
try/catch/finally, throw new a ponowne zgłaszanie to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.
Przegląd wyjątków
Cel: Bezpiecznie obsługiwać i propagować błędy.
- try/catch: obsługiwać konkretne wyjątki
- finally: zawsze wykonywać sprzątanie
- throw new a ponowne zgłoszenie
- Procedury obsługi powinny być krótkie; nie ukrywaj błędów
Konkretna sekcja catch
Przechwytuj najbardziej szczegółowy oczekiwany wyjątek; procedura obsługi powinna być krótka i przejrzysta.
using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Start");
try
{
int x = 10;
int y = 0; // will cause DivideByZeroException
Console.WriteLine(x / y);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero: " + ex.GetType().Name);
}
Console.WriteLine("Continue");
}
}
Kolejność sekcji catch
Kolejność ma znaczenie: umieszczaj konkretne sekcje catch przed ogólną sekcją catch dla Exception, która powinna znajdować się na końcu jako zabezpieczenie.
using System;
public class Program
{
static int ParseAndDivide(string text, int divisor)
{
// Throws FormatException or DivideByZeroException
int value = int.Parse(text);
return value / divisor;
}
public static void Main(string[] args)
{
try
{
Console.WriteLine(ParseAndDivide("not-a-number", 2));
}
catch (FormatException)
{
Console.WriteLine("Bad number format");
}
catch (Exception ex)
{
// Fallback last
Console.WriteLine("Other error: " + ex.GetType().Name);
}
}
}
finally do sprzątania
Umieszczaj sprzątanie w finally. Ten blok wykona się niezależnie od tego, czy wystąpi wyjątek.
using System;
public class Program
{
static bool opened = false;
static void UseFakeResource()
{
try
{
opened = true;
Console.WriteLine("Open");
throw new InvalidOperationException("boom");
}
catch (InvalidOperationException)
{
Console.WriteLine("Handled");
}
finally
{
opened = false; // cleanup path
Console.WriteLine("Close");
}
}
public static void Main(string[] args)
{
UseFakeResource();
Console.WriteLine("Opened? " + opened);
}
}
Poprawne ponowne zgłaszanie
Używaj throw;, aby ponownie zgłosić wyjątek i zachować oryginalny stos wywołań. throw ex; go resetuje. Opakowuj wyjątek w nowy tylko wtedy, gdy dodajesz kontekst.
using System;
public class Program
{
static void BadRethrow()
{
try
{
Fail();
}
catch (Exception ex)
{
// Resets stack trace:
throw ex; // BAD rethrow
}
}
static void GoodRethrow()
{
try
{
Fail();
}
catch
{
// Preserves original stack trace:
throw; // GOOD rethrow
}
}
static void Fail()
{
throw new InvalidOperationException("fail");
}
public static void Main(string[] args)
{
try { BadRethrow(); }
catch (Exception ex)
{
Console.WriteLine("Bad: " + (ex.StackTrace == null ? "no stack" : "stack reset likely"));
}
try { GoodRethrow(); }
catch (Exception ex)
{
Console.WriteLine("Good: preserves original stack");
}
}
}
Wskazówki dotyczące obsługi
Wskazówki:
- Przechwytuj wyjątek, gdy możesz go obsłużyć lub dodać kontekst.
- W przeciwnym razie pozwól mu propagować się wyżej.
- Procedury obsługi powinny być krótkie; unikaj cichego ignorowania wyjątków.
- Używaj finally do sprzątania; zwalnianie zasobów omówimy w następnej lekcji.
Zasada ponownego zgłaszania
Podsumowanie
Podsumowanie: Używaj try/catch do obsługi konkretnych błędów, finally do sprzątania, a podczas ponownego zgłaszania preferuj throw;, aby zachować oryginalny stos wywołań.
Często zadawane pytania
Czy lekcja „try/catch/finally, throw new a ponowne zgłaszanie” jest bezpłatna?
Tak — pełny tekst „try/catch/finally, throw new a ponowne zgłaszanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „try/catch/finally, throw new a ponowne zgłaszanie”?
Proszę używać try/catch/finally do przewidywalnej obsługi błędów, zrozumieć różnicę między throw new a ponownym zgłaszaniem oraz utrzymywać przykłady małe i skupione. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.
Ile czasu zajmuje lekcja „try/catch/finally, throw new a ponowne zgłaszanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- try/catch/finally, throw new a ponowne zgłaszanie
- Własne wyjątki i projektowanie błędów
- IDisposable, instrukcja using