在C#6中,新字符串插值的默认文化是什么?
我看到过不变和当前文化的相互矛盾的报道。
我想要一个明确的答案,我会不停地指责Invariant。
答案 0 :(得分:46)
在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
是非常常见的,这是一个简写:
string result = FormattableString.Invariant($"{name}");