C# 6 字符串插值的默认区域性是什么?
What is the default culture for C# 6 string interpolation?
在 C# 6 中,新字符串插值的默认区域性是什么?
我看到关于不变文化和当前文化的相互矛盾的报道。
我想要一个明确的答案,我会为不变量祈祷。
在 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);
}
很明显,这没有使用接受格式提供程序的重载,hence it uses the current culture。
但是,您可以将插值编译为 FormattbleString
,这样可以将格式和参数分开,并在生成最终字符串时传递特定的区域性:
FormattableString formattableString = $"{name}";
string result = formattableString.ToString(CultureInfo.InvariantCulture);
现在(如您所愿)使用 InvariantCulture
非常普遍,特别是有一个 shorthand:
string result = FormattableString.Invariant($"{name}");
在 C# 6 中,新字符串插值的默认区域性是什么?
我看到关于不变文化和当前文化的相互矛盾的报道。
我想要一个明确的答案,我会为不变量祈祷。
在 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);
}
很明显,这没有使用接受格式提供程序的重载,hence it uses the current culture。
但是,您可以将插值编译为 FormattbleString
,这样可以将格式和参数分开,并在生成最终字符串时传递特定的区域性:
FormattableString formattableString = $"{name}";
string result = formattableString.ToString(CultureInfo.InvariantCulture);
现在(如您所愿)使用 InvariantCulture
非常普遍,特别是有一个 shorthand:
string result = FormattableString.Invariant($"{name}");