簡體   English   中英

C#6.0的字符串插值是否依賴於Reflection?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM