在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/