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