【C#】内插字符串增强 骚操作原理讲解
2022-10-25 14:03 作者:SunnieShine | 我要投稿

内插字符串的增强(Interpolated String Enhancements)
内插字符串是 C# 6 就有的一个特性,但它最开始被直接翻译成 string.Format 的方法调用,因此会造成装箱影响性能。
C# 10 将其优化,又因为考虑到兼容性的问题,所以没有直接改变 C# 6 的这种编译行为,而是单独指定了一个新的行为:翻译成类似 StringBuilder 的类似拼接的行为。
内插字符串包含两部分:内插部分(Interpolation)和字面量部分(Literal)。内插和字面量部分调用不同的方法。当拼接字面量的时候,调用 AppendLiteral 方法;而拼接内插部分的时候,则调用的是 AppendFormatted 方法。
另外,考虑到性能优化的问题,编译器会提前计算内插字符串的总长度以及内插部分的总个数。你可以使用你自定义的内插字符串拼接器对象的构造器来获取这两个数值,分别都是 int 类型。
只要我们定义出了这种数据类型,就可以在任何使用内插字符串的地方转译成这样的对象进行拼接,避免编译器的默认行为,而且还能优化性能。
一个比较方便入门的参考实现代码:
图1:调用部分

图2:自定义内插字符串拼接器对象部分
