1. ホーム
  2. .net

[解決済み】CultureInfo.InvariantCultureの意味は何ですか?

2022-04-10 18:16:17

質問

このような文字列があります。

var foo = "FooBar";

という2つ目の文字列を宣言したい。 bar の1文字目と4文字目に等しくなるようにします。 foo ということで、こんな感じでやっています。

var bar = foo[0].ToString() + foo[3].ToString();

これは期待通りに動作しますが ReSharper を付けるようにアドバイスされています。 Culture.InvariantCulture を括弧の中に入れているので、この行は次のようになります。

var bar = foo[0].ToString(CultureInfo.InvariantCulture)
        + foo[3].ToString(CultureInfo.InvariantCulture);

これはどういう意味ですか、また、私のプログラムの実行に影響しますか?

どのように解決するのですか?

すべての文化圏で、日付と小数/通貨値に同じフォーマットが使用されているわけではありません。

これは、入力値を変換するときに問題になります。 (読み) 文字列として格納されているものを DateTime , float , double または decimal . また、前述のデータ型を文字列にフォーマットする場合も同様です。 (書き込み) を表示または保存するために使用します。

日付と小数点/通貨値がどのようなカルチャになるかが事前に分かっている場合、その特定の CultureInfo プロパティ(例 CultureInfo("en-GB") ). 例えば、ユーザーからの入力を期待する場合。

CultureInfo.InvariantCulture プロパティは、ユーザーのローカル設定に依存しないソフトウェアでパース可能な文字列をフォーマットまたはパースする場合に使用します。

デフォルト値は CultureInfo.InstalledUICulture ということで、デフォルトのCultureInfoは実行OSの設定に依存することになります。このため、カルチャー情報が常にあなたの意図に合っていることを確認する必要があります ( マーティンの回答 を参考にしてください。)