如何将模式字符串转换为带美元符号的Interpolated string?
问题解答
直接把从配置读取的模式字符串用$pattern当成插值字符串用是完全行不通的——C#的字符串插值是编译阶段就处理的特性,编译器会把$"{x} abc {y}"这种代码直接转换成string.Format的调用,但你从配置读的pattern是运行时才确定的内容,编译器根本没法提前识别里面的{x}、{y}占位符,所以$pattern会直接编译报错。
要实现类似插值的变量替换效果,有几种原生的解决办法:
用
string.Format处理索引占位符:如果配置里的模式字符串用的是索引式占位符(比如"{0} abc {1}"),直接传对应参数就行:var pattern = getPattern(); // 示例值:"{0} abc {1}" var result = string.Format(pattern, xValue, yValue);如果是你示例里的命名占位符(
{x}、{y}),可以先把模式转成索引格式,或者用下面的方法。手动替换命名占位符:简单场景下直接用
Replace逐个替换就行:var pattern = getPattern(); // 示例值:"{x} abc {y}" var result = pattern.Replace("{x}", xValue).Replace("{y}", yValue);要是占位符多或者规则复杂,也可以用正则表达式批量匹配替换。
进阶:用
FormattableStringFactory动态创建格式化串:如果需要更灵活的逻辑,可以用FormattableStringFactory.Create来动态生成格式化字符串,但本质还是基于.NET的格式化规则,并非把运行时字符串直接转换成编译时的插值字符串。
总结:没法直接将运行时读取的模式字符串转换为编译时的插值字符串,但用上面的方法完全可以实现你想要的变量替换效果。
内容的提问来源于stack exchange,提问作者zs2020
相关产品推荐
相关产品推荐

