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