Successivo

News

Usare un cast o Convert?

Michele Costabile | 11 Ottobre 2010

Quando non sono specificati in modo più stringente che genericamente numerici e quando sono calcolati in un’espressione, i campi di […]

Quando non sono specificati in modo più stringente che genericamente numerici e quando sono calcolati in un’espressione, i campi di un database Oracle sono di tipo decimal.

Quando si leggono questi tipi numerici da programma, ci sono due modi di convertirli in un formato maneggevole, anche se teoricamente un po’ più piccolo, come int. Si possono usare le funzioni di utilità  della classe Convert o un semplice cast.

Ecco un esempio del primo caso: l’estrazione di un decimal da un DataReader, chiamato rdr:

rimanenza = Convert.ToInt32(rdr.GetDecimal(rdr.GetOrdinal("RIMANENZA")));

e uno del secondo

massimale = (int) rdr.GetDecimal(rdr.GetOrdinal("MAXPERDAY"));

Ci possiamo chiedere qual è la differenza in termini di implementazione fra le due varianti, quale di queste è più performante.

Ecco il disassemblato dei due frammenti di codice affiancati e, sorpresa, le differenze sostanzialmente non ci sono. Se ne conclude che il cast viene tradotto dal compilatore in una chiamata alle funzioni statiche della classe Convert.

Confronto fra il codice prodotto da un cast e una chiamata a Convert

Confronto fra il codice prodotto da un cast e una chiamata a Convert

Così stando le cose, è da preferire il cast, che ha una sintassi più leggera e anche più leggibile.