动态字符串插值

编程入门 行业动态 更新时间:2024-10-22 18:40:25
本文介绍了动态字符串插值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

有人可以帮我吗?

必需的输出: Todo管理员职位

class Program { static void Main(string[] args) { Console.WriteLine(ReplaceMacro("{job.Name} job for admin", new Job { Id = 1, Name = "Todo", Description="Nothing" })); Console.ReadLine(); } static string ReplaceMacro(string value, Job job) { return value; //Output should be "Todo job for admin" } } class Job { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } }

推荐答案

两个建议:

DataBinder.Eval

string ReplaceMacro(string value, Job job) { return Regex.Replace(value, @"{(?<exp>[^}]+)}", match => { return (System.Web.UI.DataBinder.Eval(new { Job = job }, match.Groups["exp"].Value) ?? "").ToString(); }); }

Linq.Expression

使用 MSDN LINQSamples中提供的动态查询类:

string ReplaceMacro(string value, Job job) { return Regex.Replace(value, @"{(?<exp>[^}]+)}", match => { var p = Expression.Parameter(typeof(Job), "job"); var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, match.Groups["exp"].Value); return (e.Compile().DynamicInvoke(job) ?? "").ToString(); }); }

在我看来,Linq.Expression更强大,因此如果您信任输入字符串,则可以做更多有趣的事情,即:

In my opinion, the Linq.Expression is more powerful, so if you trust the input string, you can do more interesting things, i.e.:

value = "{job.Name.ToUpper()} job for admin" return = "TODO job for admin"

更多推荐

动态字符串插值

本文发布于:2023-11-08 14:04:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1569581.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   插值   动态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!