IsDate, try...catch, TryParse

di Andrea Zani, in .NET2,

Ancora colto dai dubbi (rafforzati da abuso del panettone di questi giorni) mi sono messo a fare dei confronti per le varie conversioni. Sotto esame ho messo la conversione da stringa a DateTime. Il modo più semplice, se si usa il Visual Basic, è scrivere:

if isDate("12/12/2000") then
 ' è una data
else
 ' non è una data
end if

Nel caso del C# che non ha la funzione isdate dobbiamo arrangiarci con il costrutto try...catch:

try
{
 DateTime data=DateTime.Parse("12/12/2000");
}
catch
{
 // non è una data
}

Dal Framework 2 sarà presente una funzione interna del framework per le varie conversioni (anche tra integer, double, ecc...), TryParse:

DateTime data;
if (!DateTime.TryParse("12/12/2000", out data))
{
  // non è una data
}

E via con il test delle prestazioni... Ecco la classifica dopo un pesantissimo test con il tentativo di inserimento di una data corretta:

  1. DateTime.TryParse: 0,001550
  2. IsDate: 0,001690 s
  3. Try...Catch: 0,001950 s

Ecco in caso di data sbagliata:

  1. DateTime.TryParse: 0,003121 s
  2. IsDate: 0,003340 s
  3. Try...catch: 0,855457

In ogni caso il TryParse è leggermente più veloce di "IsDate". Il costrutto "try... catch" è accettabile in caso di data corretta, ma in caso inverso è un disastro (dovuto alla sollevazione di una eccezione). Sto guardando ora il codice, e nel caso del "TryParse" sto scoprendo una intricata routine che controlla la stringa in tutti i suoi dettagli per il controllo della data. Ottimo.

Buone feste e buon anno.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese