C#6.0的字符串插值是否依赖于Reflection?

时间:2015-07-11 16:35:11

标签: c# string-interpolation c#-6.0

简短而简单。 C#6.0中的新字符串插值是否依赖于反射?即确实

string myStr = $"Hi {name}, how are you?";

在运行时使用反射来查找变量" name"它的价值?

2 个答案:

答案 0 :(得分:19)

没有。它没有。它完全基于编译时评估。

你可以看到这个编译和反编译的TryRoslyn example

_Generic

进入这个:

int name = 4;
string myStr = $"Hi {name}, how are you?";

字符串插值也支持使用int num = 4; string.Format("Hi {0}, how are you?", num); 作为结果(again using TryRoslyn)这个:

IFormattable

变成这样:

int name = 4;
IFormattable myStr = $"Hi {name}, how are you?";

答案 1 :(得分:3)

This article解释说它是基于编译时的(并在内部调用string.Format()。引用:

  

在编译时转换字符串插值以调用等效的string.Format调用。这样就像以前一样支持本地化(虽然仍然使用复合格式字符串),并且不会通过字符串引入任何后编译代码注入。