简短而简单。 C#6.0中的新字符串插值是否依赖于反射?即确实
string myStr = $"Hi {name}, how are you?";
在运行时使用反射来查找变量" name"它的价值?
答案 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调用。这样就像以前一样支持本地化(虽然仍然使用复合格式字符串),并且不会通过字符串引入任何后编译代码注入。