IsDate, try...catch, TryParse
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 ifNel 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:
- DateTime.TryParse: 0,001550
- IsDate: 0,001690 s
- Try...Catch: 0,001950 s
Ecco in caso di data sbagliata:
- DateTime.TryParse: 0,003121 s
- IsDate: 0,003340 s
- 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.











