0Pricing
C# Academy · Lekcja

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

Szybkie sprawdzenie: Która instrukcja poprawnie ponownie zgłasza bieżący wyjątek, zachowując oryginalny ślad stosu wywołań?

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

  1. try/catch/finally, throw new a ponowne zgłaszanie
  2. Własne wyjątki i projektowanie błędów
  3. IDisposable, instrukcja using
← Powrót do C# Academy