首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将命名参数C#到替换为参数值的字符串

将命名参数C#到替换为参数值的字符串
EN

Stack Overflow用户
提问于 2008-12-18 21:20:58
回答 9查看 18.9K关注 0票数 8

我想以一种性能良好的方式(我希望)将字符串中的命名参数替换为代码中的命名参数,例如,我的字符串:

代码语言:javascript
运行
复制
"Hi {name}, do you like milk?"

如何将{name}替换为代码、正则表达式?太贵了?你推荐哪种方式?

他们如何在示例NHibernates HQL中替换:my_param到用户定义的值?或者在我更喜欢的MVC路由中,“{ ASP.NET }/{action}”,new { controller = "Hello",... }?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-12-18 21:25:13

你确认正则表达式太昂贵了吗?

正则表达式的成本被大大夸大了。对于这样一个简单的模式,性能会相当好,实际上可能只比直接搜索和替换稍差一点。另外,在构造正则表达式时,您是否尝试过使用Compiled标志?

也就是说,你不能使用最简单的方式吗,比如Replace

代码语言:javascript
运行
复制
string varname = "name";
string pattern = "{" + varname + "}";
Console.WriteLine("Hi {name}".Replace(pattern, "Mike"));
票数 20
EN

Stack Overflow用户

发布于 2008-12-18 21:26:50

正则表达式当然是一个可行的选择,特别是对于MatchEvaluator

代码语言:javascript
运行
复制
    Regex re = new Regex(@"\{(\w*?)\}", RegexOptions.Compiled); // store this...

    string input = "Hi {name}, do you like {food}?";

    Dictionary<string, string> vals = new Dictionary<string, string>();
    vals.Add("name", "Fred");
    vals.Add("food", "milk");

    string q = re.Replace(input, delegate(Match match)
    {
        string key = match.Groups[1].Value;
        return vals[key];
    });
票数 14
EN

Stack Overflow用户

发布于 2008-12-18 21:45:20

现在,如果您在字典中有替换项,如下所示:

代码语言:javascript
运行
复制
    var  replacements = new Dictionary<string, string>();
    replacements["name"] = "Mike";
    replacements["age"]= "20";

那么正则表达式就变得非常简单了:

代码语言:javascript
运行
复制
Regex regex = new Regex(@"\{(?<key>\w+)\}");
    string formattext = "{name} is {age} years old";
    string newStr = regex.Replace(formattext, 
            match=>replacements[match.Groups[1].Captures[0].Value]);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/379328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档