Stamattina mentre sistemavo un po’ (un bel po’…) di warning generati dalla Code Analysis ho “scoperto” una cosa che non sapevo, come se fosse una delle poche ;-).

Osserviamo il seguente esempio:

public void MyMethod()
{
    try
    {
        //Do something interesting
    }
    catch( Exception x )
    {
        tracer.Critical( x );
        throw x;
    }
}

In C# è possibile utilizzare sia “throw x;” che solo “throw;” il risultato è sempre lo stesso: l’exception viene rilanciata al chiamente.

C’è però un’importante differenza: se analizziamo lo stack trace dell’esempio scopriamo che l’origine dell’exception è la riga “throw x;” e non l’effettiva locazione dell’errore cosa che invece otterremmo con l’uso del semplice “throw;”.

.m