![](/img/trans.png)
[英]C# 6.0, .NET 4.51 and VS2015 - Why does string interpolation work?
[英]Does C# 6.0's String interpolation rely on Reflection?
簡短而簡單。 C#6.0中的新字符串插值是否依賴於反射? 即
string myStr = $"Hi {name}, how are you?";
在運行時使用反射來查找變量“name”及其值?
不,它沒有。 它完全基於編譯時評估。
你可以看到這個TryRoslyn示例編譯和反編譯:
int name = 4;
string myStr = $"Hi {name}, how are you?";
進入:
int num = 4;
string.Format("Hi {0}, how are you?", num);
字符串插值也支持使用IFormattable
作為結果( 再次使用TryRoslyn ):
int name = 4;
IFormattable myStr = $"Hi {name}, how are you?";
變成這樣:
int num = 4;
FormattableStringFactory.Create("Hi {0}, how are you?", new object[] { num });
本文解釋它是基於編譯時的(並在內部調用string.Format()
。引用:
在編譯時轉換字符串插值以調用等效的string.Format調用。 這就像以前一樣保留了對本地化的支持(盡管仍然使用復合格式字符串)並且不會通過字符串引入任何后編譯注入代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.