数値、日付、および時刻が文字列にフォーマットされるか、文字列から解析される場合、カルチャを使用してその方法が決定されます。たとえば、支配的なen-US
文化では、次の文字列表現があります。
- 1,000,000.00-2桁の小数で100万
- 2013年1月29日-この投稿の日付
私の文化(da-DK
)では、値には次の文字列表現があります。
- 1.000.000,00-2桁の小数で100万
- 2013年1月29日-この投稿の日付
Windowsオペレーティングシステムでは、ユーザーは数値と日付/時刻の形式をカスタマイズすることもでき、オペレーティングシステムのカルチャ以外のカルチャを選択することもできます。使用される書式設定は、ユーザーの選択であり、本来あるべき姿です。
あなたが値をフォーマットするときに、インスタンスに使用して、ユーザに表示されるToString
か、String.Format
または使用して文字列から解析DateTime.Parse
やDecimal.Parse
デフォルトが使用することですCultureInfo.CurrentCulture
。これにより、ユーザーはフォーマットを制御できます。
ただし、多くの文字列の書式設定と解析は、実際にはアプリケーションとユーザーの間で交換される文字列ではなく、アプリケーションと一部のデータ形式(XMLまたはCSVファイルなど)の間で交換される文字列です。その場合CultureInfo.CurrentCulture
、フォーマットと解析が異なるカルチャで行われると壊れる可能性があるため、使用したくないでしょう。その場合は、使用する必要がありますCultureInfo.InvariantCulture
(これはen-US
カルチャに基づいています)。これにより、値が問題なく往復できるようになります。
ReSharperが警告を表示する理由は、一部のアプリケーション作成者がこの区別に気付いていないため、意図しない結果につながる可能性CultureInfo.CurrentCulture
がen-US
ありますが、と同じ動作をするため、これを発見することはありませんCultureInfo.InvariantCulture
。ただし、アプリケーションを別のカルチャで使用すると、あるカルチャをフォーマットに使用し、別のカルチャをアプリケーションの解析に使用する可能性があると、すぐに機能しなくなる可能性があります。
要約すると:
- 使用
CultureInfo.CurrentCulture
あなたは書式設定やユーザーの文字列を解析している場合(デフォルト)。
CultureInfo.InvariantCulture
ソフトウェアで解析可能な文字列をフォーマットまたは解析する場合に使用します。
- ユーザーがフォーマットと解析の方法を制御できないため、特定の国の文化を使用することはほとんどありません。