In meiner Anwendung habe ich ein Textfeld - txtDiscount
, wo der Administrator einen Rabatt Prozentsatz für einen bestimmten Benutzer festlegen kann, oder er kann nicht. Am hinteren Ende möchte ich die Daten speichern, so jetzt habe ich dieses:Wie kann double.TryParse verwendet werden, wenn die Ausgabe null sein darf?
double? discount = null;
if (!string.IsNullOrEmpty(txtDiscount.Text))
{
if (!double.TryParse(txtDiscount.Text, out discount)) errors.Add("Discount must be a double.");
}
So bekomme ich einen Fehler für invalid argument
und es ist offensichtlich die discount
, die keine Nullwerte enthalten sein kann, wenn ich werde es in TryParse
verwenden bin . Ich habe gesehen, dass viele Leute Erweiterungen für diese Art von Situationen machen, aber im Moment glaube ich nicht, dass es notwendig ist. Was ich denken kann ist eine andere Variable wie folgt:
double? discount = null;
private double _discount;
if (!string.IsNullOrEmpty(txtDiscount.Text))
{
if (!double.TryParse(txtDiscount.Text, out _discount))
{
errors.Add("Discount must be adouble.");
}
else
{
discount = _discount;
}
}
und dann verwenden, um meine NULL festlegbare discount
den Wert an die Datenbank zu übergeben. Aber ich mag den obigen Code eigentlich nicht, es scheint mir für eine solche Aufgabe ziemlich kompliziert zu sein, aber ich kann mir nichts Besseres vorstellen. Wie kann ich mit dieser Situation umgehen, ohne die Erweiterungsmethode zu verwenden?
Warum verkomplizieren Sie das Design der Anwendung durch spezielle Bearbeitung von Fällen? Warum nimmt das System immer einen Rabattwert (von 0.0) an und nur wenn jemand dies ändert, erhalten Sie eine neue Nummer. Wenn jede Berechnung immer den Rabatt enthält (auch wenn es 0.0 ist), benötigen Sie keine spezielle Fallbehandlung. Für Ihre GUI benötigen Sie zwar einen leeren String-Check, machen aber keinen Fehler und spiegeln das Datenbankdesign in Ihrem Frontend wider. – Samuel
Nun, in diesem Fall denke ich, dass Nullable in Ordnung ist, denn '0.0' ist immer noch ein Wert, können Sie sagen, dass der Benutzer 0.0 Prozent Rabatt hat, wenn Nullable sagt, dass dieser Benutzer tatsächlich keinen Rabatt hat, was für mich macht mehr Sinn. Aber obwohl meine Frage allgemeiner ist, selbst wenn ich den Typ in "dobule" ändern sollte, möchte ich immer noch sehen, wie man mit diesem Fall umgeht, es scheint ziemlich normal zu sein. – Leron
@Leron Was ist, wenn der Rabatt negativ ist? –