2015-06-24 4 views
6

Ich rufe die folgenden zwei Zeilen an. Die zweite Zeile stürzt .:Warum verursacht NumberStyles.AllowThousands eine Exception, wenn eine negative Zahl übergeben wird?

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

Allerdings, wenn ich die Werte ändern, nicht haben ‚‘ Zeichen und entfernen Sie die Number Enum es funktioniert. z.B.

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

Mache ich etwas falsch? Ist das ein bekanntes Problem? Gibt es einen akzeptablen Work-Around, bei dem keine Hacky-String-Manipulation erforderlich ist?

bearbeiten Ich sollte die Ausnahme erwähnt haben ist eine System.FormatException, "Eingabe Zeichenfolge war nicht in einem korrekten Format."

+1

Was ist die Ausnahme? –

Antwort

7

Für Ihr zweites Beispiel müssen Sie auch AllowLeadingSign verwenden, da Sie in Ihrer Zeichenfolge NegativeSign verwenden.

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

Wenn Sie long.Parse(string) overload verwenden, verwendet diese Methode NumberStyles.Integer Composite-Stil, die umfasst AllowLeadingSign selbst bereits hat.

Von reference source;

Integer = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign, 
Verwandte Themen