在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预览版具有different syntax,在早期博客上引起了很多关注。您仍然会看到很多有关使用反斜杠进行字符串插值的引用,但这在语法上不再有效。

关于c# - '$'标志在C#6.0中有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30194893/

10-11 15:59