Sdílet prostřednictvím


(C# Příručka programování) zpracování výjimek

A akci blok slouží programátory C# kódu oddíl, který může být ovlivněna výjimku.Spojené catch bloky slouží ke zpracování výsledné výjimky.A nakonec blok obsahuje kód, který je spuštěn bez ohledu na to, zda je vyvolána výjimka try blok, například uvolnění prostředků, které jsou přiděleny v try bloku.A try blok vyžaduje jeden nebo více souvisejících catch bloky, nebo finally bloku nebo obojí.

Následujících příkladů try-catch prohlášení try-finally prohlášení a try-catch-finally prohlášení.

try
{
    // Code to try goes here.
}
catch (SomeSpecificException ex)
{
    // Code to handle the exception goes here.
    // Only catch exceptions that you know how to handle.
    // Never catch base class System.Exception without
    // rethrowing it at the end of the catch block.
}
try
{
    // Code to try goes here.
}
finally
{
    // Code to execute after the try block goes here.
}
try
{
    // Code to try goes here.
}
catch (SomeSpecificException ex)
{
    // Code to handle the exception goes here.
}
finally
{
    // Code to execute after the try (and possibly catch) blocks 
    // goes here.
}

A try bez blokování catch nebo finally bloku způsobí chybu kompilátoru.

Bloky catch

A catch bloku můžete zadat typ výjimky zachytí.Specifikace typu je volána filtr výjimek.Typ výjimky měly být odvozeny z Exception.Obecně, nezadávejte Exception jak filtrovat výjimky neznáte buď jak zpracovat všechny výjimky, které mohou být vyvolány v try zahrnuli bloku, nebo vyvolat prohlášení na konci své catch bloku.

Více catch bloky s filtry jiná výjimka může být zřetězeno.catch Bloky jsou vyhodnocovány shora dolů v kódu, ale pouze jeden catch blok je proveden pro jednotlivé výjimky, je vyvolána výjimka.První catch blok, který určuje přesný typ nebo základní třída vyvolaná výjimka je proveden.Pokud ne catch bloku určuje odpovídající filtr výjimek catch blok, který nemá filtr je zaškrtnuto, pokud je k dispozici v příkazu.Je důležité umístění catch první typy bloky s nejvíce (který je nejvíce odvozená) specifické výjimky.

By zachytit výjimky, pokud jsou splněny následující podmínky:

  • Máte dobré vysvětlení o proč může být vyvolána výjimka a implementovat specifické pro obnovení jako uživatele zadejte nový název souboru při zachytit FileNotFoundException objektu.

  • Můžete vytvořit a vyvolat nové, více specifické výjimky.

    int GetInt(int[] array, int index)
    {
        try
        {
            return array[index];
        }
        catch(System.IndexOutOfRangeException e)
        {
            throw new System.ArgumentOutOfRangeException(
                "Parameter index is out of range.");
        }
    }
    
  • Chcete-li částečně zpracování výjimky před předáním další zpracování.V následujícím příkladu catch blok slouží k přidání položky do protokolu chyb před opětné vyvolání výjimky.

    try
    {
        // Try to access a resource.
    }
    catch (System.UnauthorizedAccessException e)
    {
        // Call a custom error logging procedure.
        LogError(e);
        // Re-throw the error.
        throw;     
    }
    

Nakonec bloky

A finally blok umožňuje vyčistit akce, které jsou provedeny v try bloku.Pokud finally blok provede po poslední, try blok a všechny odpovídající catch bloku.A finally blokovat vždy spustí, bez ohledu na to zda je vyvolána výjimka, nebo catch blok odpovídající typ výjimky.

finally Blok slouží k uvolnění prostředků, jako soubor proudy připojení databáze a zpracovává grafiku bez čekání na objekty na uvolňování v modulu runtime.Další informace naleznete v tématu pomocí příkazu (C#-Reference).

V následujícím příkladu finally blok slouží k zavření souboru, který je otevřen v try bloku.Všimněte si, že stav popisovač souboru je kontrolována před zavřením souboru.Pokud try bloku nelze otevřít soubor, stále má popisovač souboru hodnotu null a finally blok nepokouší jej zavřít.Případně pokud je soubor otevřen v úspěšně try blok, finally blok zavře otevřený soubor.

System.IO.FileStream file = null;
System.IO.FileInfo fileinfo = new System.IO.FileInfo("C:\\file.txt");
try
{
    file = fileinfo.OpenWrite();
    file.WriteByte(0xF);
}
finally
{
    // Check for null because OpenWrite might have failed.
    if (file != null)
    {
        file.Close();
    }
}

Specifikace jazyka C#

Další informace naleznete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Výjimky a zpracování výjimek (Příručka programování C#)

try-catch (C#-Reference)

Zkuste finally (C#-Reference)

try-catch-finally (C#-Reference)

pomocí příkazu (C#-Reference)

Koncepty

Příručka programování C#

Další zdroje

C#-Reference