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

C#如何对从数据库获取的带插值占位符的字符串实现插值替换

C#运行时模板字符串占位符替换方案

问题根因

C#的$""字符串插值是编译时特性,编译器仅会在编译阶段处理代码中写死的插值字符串中的{}占位符,替换为对应的取值逻辑。从数据库读取的模板字符串是运行时才获取的,编译阶段不会处理其中的占位符,因此直接书写$"{a}"只会原样输出模板的原始内容,无法完成替换。

实现方案

方案1:直接批量替换(适配固定规则场景)

占位符规则固定的场景下,直接调用Replace方法逐个替换即可,逻辑最简单无额外依赖:

string a = "The quick brown {Split[0]}   {Split[1]} the lazy dog";
string b = "jumps over";
// 变量名不要与内置方法同名避免歧义,这里改为splitArr
string[] splitArr = b.Split(' ');

string c = a.Replace("{Split[0]}", splitArr[0])
            .Replace("{Split[1]}", splitArr[1]);
Console.WriteLine(c);
// 输出结果:The quick brown jumps   over the lazy dog

方案2:正则动态匹配(适配占位符数量不固定场景)

如果模板中{Split[N]}的N值数量不固定,可以通过正则批量匹配替换,同时可以加索引越界防护避免报错:

using System.Text.RegularExpressions;

string a = "The quick brown {Split[0]}   {Split[1]} the lazy dog";
string b = "jumps over";
string[] splitArr = b.Split(' ');

string c = Regex.Replace(a, @"\{Split\[(\d+)\]\}", match => 
{
    int index = int.Parse(match.Groups[1].Value);
    return index < splitArr.Length ? splitArr[index] : match.Value;
});
Console.WriteLine(c);

方案3:字典映射替换(适配多类型占位符通用场景)

如果模板中后续可能扩展其他变量的占位符,可以用字典统一管理替换映射关系,扩展性更强:

string a = "The quick brown {Split[0]}   {Split[1]} the lazy {Animal}";
string b = "jumps over";
string[] splitArr = b.Split(' ');

var replaceMap = new Dictionary<string, string>()
{
    {"{Split[0]}", splitArr[0]},
    {"{Split[1]}", splitArr[1]},
    {"{Animal}", "dog"}
};

string c = a;
foreach (var kv in replaceMap)
{
    c = c.Replace(kv.Key, kv.Value);
}
Console.WriteLine(c);

内容的提问来源于stack exchange,提问作者Jasper Dolorito Layug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:03