.NET Framework Cattura e rilancio hanno catturato eccezioni

Esempio

Quando si desidera rilevare un'eccezione e fare qualcosa, ma non è possibile continuare l'esecuzione del blocco di codice corrente a causa dell'eccezione, è possibile che si desideri rilanciare l'eccezione al successivo gestore di eccezioni nello stack di chiamate. Ci sono buoni modi e cattivi modi per farlo.

private static void AskTheUltimateQuestion()
{
    try
    {
        var x = 42;
        var y = x / (x - x); // will throw a DivideByZeroException

        // IMPORTANT NOTE: the error in following string format IS intentional
        // and exists to throw an exception to the FormatException catch, below
        Console.WriteLine("The secret to life, the universe, and everything is {1}", y); 
    }
    catch (DivideByZeroException)
    {
        // we do not need a reference to the exception
        Console.WriteLine("Dividing by zero would destroy the universe.");

        // do this to preserve the stack trace:
        throw;
    }
    catch (FormatException ex)
    {
        // only do this if you need to change the type of the Exception to be thrown 
        // and wrap the inner Exception

        // remember that the stack trace of the outer Exception will point to the
        // next line

        // you'll need to examine the InnerException property to get the stack trace
        // to the line that actually started the problem

        throw new InvalidOperationException("Watch your format string indexes.", ex);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Something else horrible happened. The exception: " + ex.Message);

        // do not do this, because the stack trace will be changed to point to
        // this location instead of the location where the exception
        // was originally thrown:
        throw ex; 
    }
}

static void Main()
{
    try
    {
        AskTheUltimateQuestion();
    }
    catch
    {
        // choose this kind of catch if you don't need any information about 
        // the exception that was caught

        // this block "eats" all exceptions instead of rethrowing them
    }
}

È possibile filtrare per tipo di eccezione e anche per proprietà di eccezione (nuovo in C # 6.0, un po 'più lungo disponibile in VB.NET (citazione necessaria)):

Documentazione / C # / nuove funzionalità