我正在寻找一种一致的方法来构建我在大型Web应用程序中使用格式化字符串的方法,而我正在寻找建议或最佳实践。
到目前为止,我已经有了一个静态类,可以进行一些常见的格式化,例如。
Formatting.FormatCurrency
Formatting.FormatBookingReference
我不相信这是可行的方法,我更喜欢直接使用.NET中格式化字符串的标准方法并使用:
amount.ToString( “C”)
reference.ToString( “000000”)
Id使用IFormattable和ICustomFormatter来处理一些更复杂的数据结构,但是我正在努力解决我们需要格式化的更简单的现有对象(在这种情况下是Int32但也是DateTime)。
我是否只是为“c”和“000000”定义常量,并在整个网络应用程序中一致地使用它们,还是有更标准的方法来实现它?
答案 0 :(得分:12)
一种选择是使用带有扩展方法的辅助类,如
public static class MyWebAppExtensions
{
public static string FormatCurrency(this decimal d)
{
return d.ToString("c");
}
}
然后你在任何地方都有一个十进制值
Decimal d = 100.25;
string s = d.FormatCurrency();
答案 1 :(得分:5)
我同意GeekyMonkey的建议,但有一处改动:
格式化是一个实现细节。我建议ToCurrencyString
遵守To *惯例及其意图。
答案 2 :(得分:2)
这个答案可以与GeekyMonkey的答案结合起来。
首先,在ASP.NET中,您可以使用globalization
元素在web.config中设置文化和UI文化。当您有特殊的格式需求时,resourceProviderFactoryType
属性就是您的朋友。
另一种可能性是创建ASP.NET Page类的子类并覆盖InitializeCulture
方法。在这里,您可以更改存储在处理HTTP请求的当前线程中的文化和UI文化。
一个简单的例子:
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentCulture = ...;
Thread.CurrentThread.CurrentUICulture = ...;
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
...
}
对于那些担心ASP.NET进行“随机”线程切换的人:
ASP.NET确保即使它们切换您的线程,原始线程中的CurrentPrincipal和culture属性也会转移到新线程。这是自动的,您无需担心丢失这些值。呼!