String to int

mercoledì 25 agosto 2004 - 08.53

ken Profilo | Newbie

Ciao,

sto sviluppando un'applicazione c# che a un certo punto deve trasformare una stringa in int.
Vorrei sapere se esiste un metodo che controlla se una stringa è un intero, per poi poterla convertire usando per esempio: mioInt = int.Parse(miaStr);...

Un idea l'ho avuta già, mi sono scritto questo metoso:
public int StringToInt(string st)
{
try { return int.Parse(st);}
catch { return -1; }
}
Il problema che questa soluzione è lentissima, specialmente se le mie stringhe (potenziali int) sono molte!! magari esiste qualche cosa di più veloce??

grazie
ciao

alextyx Profilo | Expert

Caro Ken, evidentemente il problema ti angoscia nn poco, dato che lo hai postato per ben 3 volte! :-)
Comunque io uso Vb.Net, quindi nn posso passarti codice direttamente, nè so dirti se la tua soluzione basata sull'intercettazione dell'errore sia più o meno veloce della mia, comunque io uso effettuare preventivamente un test usando ISNUMERIC:

If ISNUMERIC(StringaPippo) THEN

Poi, se la stringa è effettivamente convertibile in numero (ISNUMERIC mi garantisce che sia convertibile in un DOUBLE), confronto il valore convertito direttamente in double con quello successivamente ottenuto considerando solo la parte intera del DOUBLE. Se i valori coincidono, o nn ci sono decimali, o sono uguali a zero.

Un altro metodo che mi viene in mente adesso, quindi che potrebbe eseere assolutamente sbagliato, è quello di controllare la stringa carattere per carattere, assicurandoti che ci siano solo cifre (If CHAR.ISDIGIT(....)) e che la prime nn sia zero. Questo dovrebbe eliminare anche la possibilità di decimali, dato che eliminerebbe la possibilità di un carattere separatore.
Poi resta soltanto da stabilire se il valore della stringa è esprimibile entro i limiti dell'integer. Ovviamente puoi anche controllare se un primo carattere è un segno meno o segno più e poi chiedere che il secondo nn sia 0, oppure, in questo caso, sostituirlo con una stringa nulla, per evitare numeri 'brutti', come: -0001578 arrivando ad ottenere, ad esempio, un ben più pulito -1578.

Insomma, puoi sbizzarrirti, ma nn so se poi guadagnerai in velocità. Se l'eccezione ti si verifica spesso, direi senz'altro di sì, perchè se nn ricordo male, la notifica di un eccezione è una cosa piuttosto lenta, almeno un VB.Net.
Buon lavoro!

ken Profilo | Newbie

ciao,
buone idee.. adesso provo!!
per ora ti ringrazio
ciao
stefano
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5