“$”符号在 C# 6.0 中有什么作用?

What does '$' sign do in C# 6.0?

在 MVC 6 源代码中,我看到一些代码行的字符串以 $ 符号开头。

因为我以前从未见过它,所以我认为它是 C# 6.0 中的新功能。我不确定。 (我希望我是对的,否则我以前从未穿过它会感到震惊。

就像:

var path = $"'{pathRelative}'";

你说得对,这是 C# 6 的新功能。

字符串前的$ 符号启用字符串插值。编译器会专门解析字符串,花括号内的任何表达式都会被求值并插入到字符串中。

在引擎盖下它转换为与此相同的东西:

var path = string.Format("'{0}'", pathRelative);

让我们看看这个代码段的 IL:

var test = "1";
var val1 = $"{test}";
var val2 = string.Format("{0}", test);

编译为:

// var test = "1";
IL_0001: ldstr "1"
IL_0006: stloc.0

// var val1 = $"{test}";
IL_0007: ldstr "{0}"
IL_000c: ldloc.0
IL_000d: call string [mscorlib]System.String::Format(string, object)
IL_0012: stloc.1

// var val2 = string.Format("{0}", test);
IL_0013: ldstr "{0}"
IL_0018: ldloc.0
IL_0019: call string [mscorlib]System.String::Format(string, object)
IL_001e: stloc.2

所以两者在编译后的应用中是一样的


关于 C# 字符串插值语法的注释:不幸的是,现在字符串插值的问题还很混乱,因为最初的 C# 6 预览版 很早就在博客上引起了很多关注。您仍然会看到很多关于使用反斜杠进行字符串插值的引用,但这在语法上不再有效。