Questo sito utilizza i cookie per migliorare servizi ed esperienza del lettore. Se decidi di continuare la navigazione consideriamo che accetti il loro uso . Per e informazioni sulla Privacy leggere la Google Policies Privacy

Se continui nella navigazione accetti il loro uso. OK

lunedì 9 agosto 2010

Estensione della classe double

Sin dalla versione 1.0 del framework .NET gli sviluppatori avevano a disposizione il metodo Parse per convertire una stringa composta da numeri in un double, la limitazione di questo metodo era evidente: se il testo non poteva essere convertito in un numero scatenava un'eccezione, con l'abbligo da parte dello sviluppatore di dover gestire con un blocco try...catch... il fallimeto di una conversione. Con la versione 2.0 finalmente viene introdotto (per la maggior parte dei tipi base, ma non per tutti (?)) il metodo TryParse che si occupa di gestire eventuali eccezioni in fase di parsing (chiaramente senza utilizzare lenti costrutti try...catch... necessari prima). Esso restituisce true se la conversione  va a buon fine o false altrimenti.
Sempre con l'introduzione del framework 2.0 sono stati introdotti anche i tipi nullable che permettevano di valorizzare a null un value type (come un double o una data), con grande sollievo di tutte quelle persone che avevano bisogno di database nelle proprie applicazioni! Purtroppo ci è accorti di una profonda mancanza (che sussiste tuttora, con la versione 4.0 del framework). La possibilità di fare il parsing utilizzando la capacità dei nullable di impostarsi a null (!).
public static double? ParseDoubleNullable(object source) {
   double d;
   if (double.TryParse(source.ToString(), out d))
      return d;
   else
      if (double.TryParse(source.ToString(), System.Globalization.NumberStyles.Currency, null, out d))
      return d;
   else
      return null;
}
questo metodo è funzionale, ma scomodo, perchè necessita di ricordarsi il namespace dove risiede l'estensione e rende faragginosa la lettura del codice.
Per risolvere questi piccoli problemi possiamo spingerci oltre e andare a creare un metodo di estensione che si applichi a stringhe (o più in generale a un'object) e che permetta di restituirci un double?.
public static double? ParseDoubleNullable(this object source) {
   double d;
   if (double.TryParse(source.ToString(), out d))
      return d;
   else
   if (double.TryParse(source.ToString(), System.Globalization.NumberStyles.Currency, null, out d))
      return d;
   else
      return null;        
}
Questo, chiaramente, apre tutta una serie di possibili metodi di parsing!

Nessun commento:

Posta un commento