web-dev-qa-db-ja.com

C#6文字列補間の既定のカルチャは何ですか?

C#6では、新しい文字列補間の既定のカルチャは何ですか?

インバリアントカルチャーとカレントカルチャーの両方の矛盾するレポートを見てきました。

決定的な答えが欲しいのですが、私はインバリアントのために指を交差させ続けています。

33
Aaron Stainback

C#での文字列補間の使用は、String.Formatへの単純な呼び出しにコンパイルされます。あなたは TryRolsyn でこれを見ることができます:

public void M()
{
    string name = "bar";
    string result = $"{name}";
}

これにコンパイルされます:

public void M()
{
    string arg = "bar";
    string text = string.Format("{0}", arg);
}

これは、フォーマットプロバイダーを受け入れるオーバーロードを使用しないことは明らかです したがって、現在のカルチャを使用します

ただし、補間をFormattbleStringにコンパイルして、形式と引数を別々に保持し、最終的な文字列を生成するときに特定のカルチャを渡すことができます。

FormattableString formattableString = $"{name}";
string result = formattableString.ToString(CultureInfo.InvariantCulture);

さて、(お好みで)InvariantCultureを使用することは非常に一般的であるため、具体的にはその省略形があります:

string result = FormattableString.Invariant($"{name}");
48
i3arnon