4

我正在寻找一种一致的方式来构建我在整个大型 Web 应用程序中对格式化字符串的使用,并且我正在寻找关于哪种方式的建议或最佳实践。

到目前为止,我有一个静态类,它执行一些常见的格式化,例如

Formatting.FormatCurrency

Formatting.FormatBookingReference

我不相信这是要走的路,我更喜欢直接使用.NET中格式化字符串的标准方法并使用:

数量.ToString("c")

参考.ToString("000000")

对于我们一些更复杂的数据结构,我使用 IFormattable 和 ICustomFormatter,但我正在努力处理我们需要格式化的更简单的现有对象(在本例中为 Int32 以及 DateTime)。

我是否只是为“c”和“000000”定义常量并在整个 Web 应用程序中一致地使用它们,还是有更标准的方法来做到这一点?

4

3 回答 3

12

一种选择是使用具有扩展方法的辅助类,例如

public static class MyWebAppExtensions
{
    public static string FormatCurrency(this decimal d)
    {
        return d.ToString("c");
    }
}

然后在任何你有十进制值的地方

Decimal d = 100.25;
string s = d.FormatCurrency();
于 2008-11-16T21:54:02.043 回答
5

我同意 GeekyMonkey 的建议,但有一处改动:

格式化是一个实现细节。我建议ToCurrencyString遵守 To* 约定及其意图。

于 2008-11-17T00:00:42.550 回答
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 和文化属性从原始线程继续传递到新线程。这是自动的,您无需担心丢失这些值。哇!

来源:ASP.NET 线程切换

于 2008-11-17T00:20:00.733 回答