You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将模式字符串转换为带美元符号的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:05:28