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

.NET是否提供模板字符串的命名参数替换内置功能?

.NET 命名模板参数替换的实现方案

.NET 本身没有提供直接支持命名模板参数替换的内置API,但可以通过以下几种可靠方式实现,同时覆盖特殊字符处理、参数不存在等边界情况:

1. 正则表达式实现(推荐)

利用System.Text.RegularExpressions.Regex可以精准匹配命名参数,同时处理参数值中的特殊字符,避免替换逻辑出错。以下是完整实现:

using System.Text.RegularExpressions;
using System.Collections.Generic;

public static string PerformSubstitution(string templateText, Dictionary<string, string> parameterNamesAndValues)
{
    // 匹配<参数名>格式的模板标记,支持字母、数字、下划线
    return Regex.Replace(templateText, @"<(\w+)>", match => 
    {
        string paramName = match.Groups[1].Value;
        // 存在对应参数则替换,否则保留原标记
        return parameterNamesAndValues.TryGetValue(paramName, out string value) 
            ? Regex.Escape(value) // 转义值中的正则特殊字符,避免干扰后续匹配
            : match.Value;
    });
}

使用示例

var myParams = new Dictionary<string, string> { { "name", "Dave" }, { "age", "34" } };
var str = PerformSubstitution("User <name> is <age> years old", myParams);
// 输出:User Dave is 34 years old

// 本地化资源场景
var localizedStr = PerformSubstitution(Strings.UserAgeDesc, myParams);

这个实现会自动忽略模板中不存在的参数(保留原标记),同时转义参数值中的特殊字符(比如$、*等),避免破坏正则匹配逻辑。

2. 基于String.Format的间接适配(需调整模板格式)

如果愿意将资源模板格式改为{参数名}(比如"User {name} is {age} years old"),可以通过正则先将命名参数转换为String.Format的索引格式,再调用内置方法:

public static string PerformNamedFormat(string templateText, Dictionary<string, string> parameterNamesAndValues)
{
    var paramList = new List<string>();
    var formattedTemplate = Regex.Replace(templateText, @"{(\w+)}", match =>
    {
        string paramName = match.Groups[1].Value;
        if (parameterNamesAndValues.TryGetValue(paramName, out string value))
        {
            paramList.Add(value);
            return $"{{{paramList.Count - 1}}}";
        }
        return match.Value;
    });
    return string.Format(formattedTemplate, paramList.ToArray());
}

这种方式复用了String.Format的内置格式化能力,但需要修改资源字符串的参数格式。

3. 注意事项

  • 如果需要支持更复杂的参数格式(比如带空格的参数名、嵌套标记),可以调整正则表达式的匹配规则(比如将\w+改为[\w\s]+)。
  • 若参数值中包含模板标记本身(比如<name>),正则转义会保留原字符,避免递归替换。

内容的提问来源于Stack Exchange,提问作者Mr. Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:20:43