2015-06-24 10 views
6

Sto chiamando le seguenti due righe. La seconda linea si blocca .:Perché NumberStyles.AllowThousands causa un'eccezione quando si passa un numero negativo?

var a = long.Parse("2,147,483,648", NumberStyles.AllowThousands); 
var b = long.Parse("-2,147,483,648", NumberStyles.AllowThousands); 

Tuttavia, se modificare i valori di non avere '' caratteri e rimuovere le NumberStyles enum funziona. per esempio.

var a = long.Parse("2147483648"); 
var b = long.Parse("-2147483648"); 

Sto facendo qualcosa di sbagliato? È un problema noto? Esiste un work-around accettabile che non implichi la manipolazione di stringhe hacky?

modifica Avrei dovuto menzionare l'eccezione è un System.FormatException, "La stringa di input non era in un formato corretto."

+1

Qual è l'eccezione? –

risposta

7

Per il secondo esempio, è necessario utilizzare AllowLeadingSign poiché si utilizza NegativeSign nella stringa.

var b = long.Parse("-2,147,483,648", 
        NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign); 

Quando si utilizza long.Parse(string) overload, questo metodo utilizza NumberStyles.Integer stile composito che ha già include AllowLeadingSign stessa.

Da reference source;

Integer = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign, 
Problemi correlati