C#6字符串插值的默认文化是什么?

时间:2015-10-18 21:07:03

标签: c# string-interpolation c#-6.0

在C#6中,新字符串插值的默认文化是什么?

我看到过不变和当前文化的相互矛盾的报道。

我想要一个明确的答案,我会不停地指责Invariant。

1 个答案:

答案 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}");