2012-05-23 4 views
10

Come convertire una stringa, ad esempio "-100,100", in long in C#.long.Parse() C#

momento ho una riga di codice che è

long xi = long.Parse(x, System.Globalization.NumberStyles.AllowThousands); 

ma questo rompe quando x è "un numero negativo".

Il mio approccio:

long xi = long.Parse("-100,253,1", 
System.Globalization.NumberStyles.AllowLeadingSign & System.Globalization.NumberStyles.AllowThousands); 

era sbagliato, come si è rotto.

risposta

9

dare un'andare:

long xi = long.Parse(x, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.AllowLeadingSign); 

Può ben essere perché si dichiara bandiere che potrebbe essere necessario Declair tutte le possibili bandiere che saranno colpiti. Ho appena confermato che questo codice funziona in un progetto di test utilizzando il valore di stringa specificato nella domanda. Fammi sapere se soddisfa le tue esigenze. Quando si dichiarano più flag in un singolo parametro, usare | invece di &

edit: http://msdn.microsoft.com/en-us/library/cc138362.aspx Trova un explination dei diversi operatori bit per bit sotto i "tipi di enumerazione come bit Bandiere" voce (che è stato più difficile da trovare di quanto pensassi.)

+0

+1 testato e lavorato – ABH

6

userei TryParse invece di Parse, al fine di evitare eccezioni, vale a dire:

long xi; 
if (long.TryParse(numberString, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.AllowLeadingSign, null, out xi)) 
    { 
     // OK, use xi 
    } 
    else 
    { 
     // not valid string, xi is 0 
    } 
+1

Lieve errore di battitura sul vostro "Parse" dovrebbe essere "TryParse", risposta altrimenti meglio. Peccato che non abbia sentito il bisogno di indicare TryParse a lui. – Skintkingle