4

大規模な Web アプリケーション全体で書式設定文字列の使用を構造化する一貫した方法を探しています。また、どの方法を使用するかについての推奨事項またはベスト プラクティスを探しています。

これまで、いくつかの一般的なフォーマットを行う静的クラスがありました。

Formatting.FormatCurrency

Formatting.FormatBookingReference

これが正しい方法であるとは確信していませんが、.NET内で文字列を直接フォーマットする標準的な方法を使用して、次を使用することをお勧めします。

amount.ToString("c")

reference.ToString("000000")

より複雑なデータ構造の一部には IFormattable と ICustomFormatter を使用しますが、フォーマットする必要があるより単純な既存のオブジェクト (この場合は Int32 だけでなく DateTime) をどうするか悩んでいます。

「c」と「000000」の定数を定義して、Web アプリ全体で一貫して使用するだけですか、それとももっと標準的な方法がありますか?

4

3 に答える 3

12

1 つのオプションは、次のような拡張メソッドでヘルパー クラスを使用することです。

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 の提案に同意しますが、1 つの変更があります。

フォーマットは実装の詳細です。ToCurrencyStringTo* 規則とその意図を守ることをお勧めします。

于 2008-11-17T00:00:42.550 に答える
2

この回答は、GeekyMonkey の回答と組み合わせることができます。

まず、ASP.NET では、globalization要素を使用して web.config でカルチャと UI カルチャを設定できます。このresourceProviderFactoryType属性は、特別なフォーマットが必要な場合に役立ちます。

もう 1 つの可能性は、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 に答える