本文介绍了动态字符串插值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有人可以帮我吗?
必需的输出: 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"更多推荐
动态字符串插值
发布评论