2016-08-08 6 views
0

Ich habe eine Methode, die Währungszeichenfolgen analysiert (z. B. "4,00 €" oder "14,50 $"), aber manchmal gibt es einen Analysefehler, und es wirft eine FormatException.Wie sehen Sie, welche Zeichenfolge eine FormatException ausgelöst hat?

Was ich tun möchte, ist die Zeichenfolge, die nicht analysiert werden konnte (warf die Ausnahme) auf eine Datenbank.

try 
{ 
    string euroNumber = "€4.00"; 

    // Will throw a FormatException 
    double parsedNumber = Double.Parse(euroNumber, NumberStyles.Currency); 
} 
catch (FormatException ex) 
{ 
    string stringThatThrewTheException; // should be "€4.00" in this case 

    // [Omitted] Sending to server logic 
} 

Ist es irgendwie möglich? Oder sollte ich irgendeine Art von Hack benutzen?

Vielen Dank im Voraus.

+3

Sie TryParse statt Versuch verwenden könnte/catch – BugFinder

+0

Ja, das könnte funktionieren, danke! –

+1

Nur um Ihnen zu zeigen, dass es Währungsformat in C# gibt. https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx Ich weiß, das könnte nicht der Fall sein Sie verwenden es, aber je mehr Sie wissen .. :) – kuskmen

Antwort

3

Wie BugFinder sagte, können Sie TryParse verwenden:

double parsedNumber; 

var result = Double.TryParse(euroNumber, NumberStyles.Currency, CultureInfo.CurrentCulture, out parsedNumber); 
if (!result) 
{ 
    // send error 
} 

Eine weitere Alternative ist die Zeichenfolge außerhalb des Anwendungsbereichs des try-Block zu verschieben:

string euroNumber = "€4.00"; 
    try 
    { 
     // Will throw a FormatException 
     double parsedNumber = Double.Parse(euroNumber, NumberStyles.Currency); 
    } 
    catch (FormatException ex) 
    { 
     // Have access to euroNumber here now 
     // [Omitted] Sending to server logic 
    } 
+0

Ausgezeichnete Antwort ! Vielen Dank! –

Verwandte Themen