C # einen benutzerdefinierten Number, um „Free“ zu schaffen, wenn ein Währungswert ist $ 0,00
-
28-09-2019 - |
Frage
Ich brauche in meiner ASP.NET MVC-Anwendung eine Währung angezeigt werden, aber wenn die Währung 0 ist, würde ich es mag „Free“ anzuzeigen (lokalisierte natürlich!) Anstelle von 0,00 $.
Also, wenn ich so etwas wie dies ...
Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;
priceFree.ToString("C");
priceNotFree.ToString("C");
Der Ausgang ist "$ 0.00" "$ 100.00"
Ich würde es gerne sein "Kostenlos" "$ 100.00"
Ich stelle mir kann ich die .ToString verwenden (String-Format, IFormatProvider format) Methode, dies zu erreichen, aber ich bin nicht sicher, wie es geht. Offensichtliche Ich möchte so viel von dem Number wie möglich wieder zu verwenden und ihnen nur außer Kraft gesetzt, wenn der Eingang 0. In diesem Fall kann ich einfache Rückkehr eine lokalisierte Ressource, die meinen „Free“ Zeichenfolge enthält.
So wie ich das tun?
Danke
Lösung
Ich denke, der einfachste Weg wäre eine Erweiterung Methode zu gehen:
public static string ToPriceString(this decimal value)
{
if (value <= 0m)
return "Free"; // Your localized resource
else
return value.ToString("C");
}
Wenn Sie mit dem IFormatProvider
gehen wollen, gibt es eine gutes Beispiel auf MSDN .
Andere Tipps
Mit
.ToString("$###.00;;Free")
Wie wäre es eine Erweiterungsmethode:
public static string FreeString(this decimal dec)
{
if(dec == 0M)
{
return "Free";
}
else
{
return dec.ToString("C");
}
}
Dann
priceFree.FreeString();
priceNotFree.FreeString();
Statt einen benutzerdefinierten IFormatProvider verwenden und es jedes Mal vorbei, wie etwa diese:
public static class MyFormatter
{
public static string ToFreeString(this decimal d)
{
return d == 0 ? "Free" : d.ToString("d");
}
}