什么是'$';在C#6.0中签名?

什么是'$';在C#6.0中签名?,c#,string-interpolation,c#-6.0,C#,String Interpolation,C# 6.0,在MVC6源代码中,我看到一些代码行的字符串以$符号开头 由于我以前从未见过它,我认为它在C#6.0中是新的。我不确定。(我希望我是对的,否则我会感到震惊,因为我以前从未穿过它 就像: var path = $"'{pathRelative}'"; 没错,这是一个新的C#6功能 字符串前的$符号启用字符串插值。编译器将专门分析字符串,大括号内的任何表达式都将被计算并插入到字符串中 在引擎盖下,它转换成与此相同的东西: var path = string.Format("'{0}'", path

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

由于我以前从未见过它,我认为它在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#string插值语法的一个注意事项:不幸的是,由于最初的C#6预览版本在早期的博客上引起了很多关注,现在在字符串插值上的水域被搞得一团糟。您仍然会看到很多关于使用反斜杠进行字符串插值的引用,但这在语法上不再有效。

这不正确在我看来,这不是重复的问题。如果你还不知道美元的用途,你就不会发现其他问题。@RichardDalton:这并不意味着这不是同一个问题。对问题的重新表述不是重复的理由。这也不是关于被接受的答案,而是关于添加以更新它的第二个答案。这个问题应该ld保持关闭。如果你不同意,总有进一步讨论的余地。@RichardDalton OP自己找不到副本这一事实更是将其作为副本关闭的原因。现在他们(以及使用此问题中使用的相同术语搜索的任何其他人)我已经投票决定重新开放,因为它不是“复制品”-第二个答案是找到正确答案的一个很好的参考,但问题和接受的答案完全无关。我找不到一个问
$
操作符是什么的问题,所以我认为保持开放是公平的-如果你不同意,欢迎你重新关闭。@Servy,那没有意义。你已经关闭了一个问题beca在另一个问题中,存在一个回答这个问题的答案,但谁必须已经知道答案才能发现它确实是一个答案。如果你尝试过,你不可能想出一个更模糊的理由来结束一个问题。