Ich habe ein Problem damit, dass TryParse für mich korrekt funktioniert. Ich habe eine Liste von Werten, von denen ich fast sicher bin, dass sie gültig sind (da sie von einer anderen Komponente in unserem System kommen), aber ich möchte sicherstellen, dass eine korrekte Fehlerbehandlung vorhanden ist.
Hier ist eine Beispielliste meiner Werte:
20.00
20.00 Uhr
-150,00
Und hier ist die Methode, die ich ursprünglich geschrieben habe:
%Vor%Die Variable 'successful' gab für -150,00 den Wert false zurück, also fügte ich NumberStyles hinzu:
%Vor%Aber jetzt, da ich die NumberStyles dort habe, wird keine der Zahlen parsen! Ich fühle mich gut, wenn IFormatProvider auf null gesetzt ist, da dies alles in unserem System ist. Kann jemand sehen, was ich falsch mache?
Die anderen Antworten haben die richtige Idee in Bezug auf die richtige Verwendung von Decimal.TryParse
. Wenn ich jedoch die betreffende Methode schreiben würde, würde ich LINQ verwenden, um mit LINQ-to-XML-Objekten zu arbeiten:
Diese Version funktioniert genauso, aber sie verwendet die Methode Enumerable.Sum Berechnen Sie die Summe. Alles, was ich liefern muss, ist eine Inline-Funktion, die Dezimalzahlen aus einem XElement extrahiert.
Dies ist nicht, wie Sie TryParse verwenden sollen.
TryParse gibt einen booleschen Wert (true / false) zurück, also sollte der obige Code lauten:
%Vor%oder kürzer gesagt,
%Vor%Andere erklären, wie man es richtig macht, aber nicht wirklich erklären, was Sie falsch machen.
Wo Sie "erfolgreich" oben verwenden, ist nicht der Erfolgswert, es ist die tatsächliche Zahl, die analysiert wird. Wenn Sie also "-150.00" analysieren, ist das natürlich negativ. Der out-Wert von TryParse ist der tatsächlich analysierte Wert und der boolesche Wert, der angibt, ob der Prozess erfolgreich war oder nicht, ist der zurückgegebene Wert. Verwenden Sie, was Sie verstehen müssen, wäre etwas wie:
%Vor%In diesem Fall ist isSuccessful WAHR, numericValue ist -150. Wenn Sie vom Benutzer bereitgestellte Werte anstelle des oben beschriebenen fest codierten Werts verwenden, sollten Sie Folgendes überprüfen:
%Vor% Ihr Erfolg wird für einen negativen Wert, der analysiert wird, negativ sein. Dein if (successful > 0)
ist was dich auslöst.
Wenn sie fast positive Werte sind, versuchen Sie es mit Convert.ToDecimal
:
Ansonsten ändern Sie Ihre Logik ein wenig, um mehr wie folgt zu sein:
%Vor%