【C#】內(nèi)插字符串增強(qiáng) 騷操作原理講解
2022-10-25 14:03 作者:SunnieShine | 我要投稿

內(nèi)插字符串的增強(qiáng)(Interpolated String Enhancements)
內(nèi)插字符串是 C# 6 就有的一個特性,但它最開始被直接翻譯成 string.Format 的方法調(diào)用,因此會造成裝箱影響性能。
C# 10 將其優(yōu)化,又因為考慮到兼容性的問題,所以沒有直接改變 C# 6 的這種編譯行為,而是單獨指定了一個新的行為:翻譯成類似 StringBuilder 的類似拼接的行為。
內(nèi)插字符串包含兩部分:內(nèi)插部分(Interpolation)和字面量部分(Literal)。內(nèi)插和字面量部分調(diào)用不同的方法。當(dāng)拼接字面量的時候,調(diào)用 AppendLiteral 方法;而拼接內(nèi)插部分的時候,則調(diào)用的是 AppendFormatted 方法。
另外,考慮到性能優(yōu)化的問題,編譯器會提前計算內(nèi)插字符串的總長度以及內(nèi)插部分的總個數(shù)。你可以使用你自定義的內(nèi)插字符串拼接器對象的構(gòu)造器來獲取這兩個數(shù)值,分別都是 int 類型。
只要我們定義出了這種數(shù)據(jù)類型,就可以在任何使用內(nèi)插字符串的地方轉(zhuǎn)譯成這樣的對象進(jìn)行拼接,避免編譯器的默認(rèn)行為,而且還能優(yōu)化性能。
一個比較方便入門的參考實現(xiàn)代碼:
圖1:調(diào)用部分

圖2:自定義內(nèi)插字符串拼接器對象部分

標(biāo)簽: