32

IFormatProviderメソッドで提供するために本当に必要なものは何だと思いますString.Format(string, object)か?

フルバリアントを書いた方がいいですか

String.Format(CultureInfo.CurrentCulture, "String is {0}", str);

あるいは単に

String.Format("String is {0}", str);

?

4

4 に答える 4

34

一般に、生成している文字列を現在のユーザーのカルチャに依存しない方法 (レジストリやファイルなど) で永続化する場合は、InvariantCulture を使用する必要があります。

UI で現在のユーザー (フォーム、レポート) に表示される文字列には、CurrentCulture を使用する必要があります。

InvariantCulture を使用する必要がある場所で CurrentCulture を使用すると、微妙なバグが発生する可能性があります。異なるカルチャを持つ複数のユーザーが同じレジストリ エントリまたはファイルにアクセスしている場合、またはユーザーが既定のカルチャを変更した場合にのみ明らかになるバグです。

CurrentCulture (IFormatProvider 引数が省略された場合の既定値) を明示的に指定することは、本質的に、上記を考慮したこと、および生成される文字列が現在のユーザーのカルチャを使用する必要があることを示すドキュメントです。そのため、FxCop は IFormatProvider 引数を指定することを推奨しています。

于 2009-01-24T11:47:48.113 に答える
22

を指定しない場合IFormatProvider(または同等に を渡す場合null)、ほとんどの引数の型は最終的に に従ってフォーマットされCultureInfo.CurrentCultureます。興味深いのはIFormatProvider、引数の書式設定で最初のクラックを取得できるカスタムを指定したり、他のコンテキストに応じて書式設定のカルチャをオーバーライドしたりできることです。

CultureInfo.CurrentCultureリソースの選択ではなく、引数のフォーマットに影響することに注意してください。リソースの選択は によって制御されCultureInfo.CurrentUICultureます。

于 2009-01-24T03:29:20.630 に答える
7

いいえ、文化に応じてレンダリングする必要がある小数点記号、通貨などの文化固有の要素が文字列に含まれていない限り、文化を指定する必要はありません。

于 2009-01-24T03:12:39.867 に答える
4

アプリケーションのローカリゼーション (グローバリゼーション) に関心がある場合は特に便利です。つまり、アプリで複数の言語と文化固有の形式をサポートする場合は、それを使用する必要があります。

于 2009-01-24T02:58:17.573 に答える