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.
Così stando le cose, è da preferire il cast, che ha una sintassi più leggera e anche più leggibile.