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

Xas*_*ser 8 c# string-interpolation c#-6.0

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

string myStr = $"Hi {name}, how are you?";
Run Code Online (Sandbox Code Playgroud)

在运行时使用反射来查找变量"name"及其值?

i3a*_*non 19

不,它没有.它完全基于编译时评估.

你可以看到这个TryRoslyn示例编译和反编译:

int name = 4;
string myStr = $"Hi {name}, how are you?";
Run Code Online (Sandbox Code Playgroud)

进入:

int num = 4;
string.Format("Hi {0}, how are you?", num);
Run Code Online (Sandbox Code Playgroud)

字符串插值也支持使用IFormattable结果(再次使用TryRoslyn):

int name = 4;
IFormattable myStr = $"Hi {name}, how are you?";
Run Code Online (Sandbox Code Playgroud)

变成这样:

int num = 4;
FormattableStringFactory.Create("Hi {0}, how are you?", new object[] { num });
Run Code Online (Sandbox Code Playgroud)