【发布时间】:2017-09-12 07:14:32
【问题描述】:
我正在开发一个 ASP.NET Core MVC 1.1 应用程序,我正在努力寻找一种干净有效的解决方案,将decimal 格式化为具有自定义货币代码的货币(即与CultureInfo 中指定的不同)。
目前,我有以下decimal 扩展类:
public static class DecimalExtensions
{
public static readonly Dictionary<string, string> CurrencyCodeToSymbol = new Dictionary<string, string>() {
{ "EUR", "€"},
{ "USD", "$"},
{ "GBP", "£"},
};
public static string FormatCurrency(this decimal decimalValue, string currencyCode)
{
var culture = (CultureInfo) CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.CurrencySymbol = CurrencyCodeToSymbol[currencyCode];
return decimalValue.ToString("C", culture);
}
}
我目前的解决方案包括两部分:
- 从货币代码到货币符号的映射。
- 使用正确的
CurrencySymbol属性创建一个新的CultureInfo实例。
很遗憾,我不喜欢任何一个部分。
对于第一部分,我可以将映射放入appsettings.json 并在Startup 类中填充Dictionary。但是,我仍然希望完全跳过这个并迭代系统支持的文化和货币。但是,根据我的研究,这在 ASP.NET Core MVC 1.1 中尚不可能。
对于第二部分,我根本不喜欢Clone() 部分。由于CultureInfo.CurrentCulture 是只读的,我将可能不得不在某些时候克隆它,但最好不要在每次调用我的扩展方法时。
有没有办法缓存克隆和更改的CultureInfo?由于这是一个扩展类,我猜依赖注入是不可能的。
【问题讨论】:
标签: c# asp.net-mvc asp.net-core localization asp.net-core-mvc