利用RazorEngine更加直观的格式化字符串

在.net中,我们可以使用string.Format函数来格式化字符串,一个简单的示例如下:

    string template = "Hello {0}! Welcome to C#!";
    string result = string.Format(template, "World");

这种格式化的方式对于字符串模板较短的时候还算比较简洁,但是一旦遇到像邮件这样比较大的模板的时候,一大堆的{0},{1},{2}就有点令人眼花缭乱了。这种情况下,往往需要一种有意义的变量来代表这种{0}, {1} {2}的数字。

    string template = "Hello %Name%! Welcome to C#!";
    string result = template.Replace("%Name%""World");

这种方式的通用性不是很强,但比较简单,今天在这里推荐一个通用性较好的方案——RazorEngine

    string template = "Hello @Model.Name! Welcome to Razor!";
    string result = Razor.Parse(template, new { Name = "World" });

当然,RazorEngine的功能远不止如此,更多的是用它打造代码生成器,感兴趣的朋友可以参看下这篇文章:http://blog.csdn.net/fangxing80/article/details/7093666

重复轮子

我一般用到这种大文本模板的地方往往是自己编写一些小工具时,动态生成并调用批处理文件。本身RazorEngine能满足我的要求,但我一般喜欢生成一个单一的Exe文件,然后把Exe文件丢到需要批量处理的文件夹中执行,并不希望顺便带上几个Dll,也用不到RazorEngine里面的那些高级功能。因此,我这里就借鉴了一下RazorEngine的语法,做了一个重复轮子:

    static class StrFormater
    {
        public static string Format(string template, object data)
        {
            return Regex.Replace(template, @"@([\w\d]+)", match => GetValue(match, data));
        }

        static string GetValue(Match match, object data)
        {
            var paraName = match.Groups[1].Value;
            try
            {
                var proper = data.GetType().GetProperty(paraName);
                return proper.GetValue(data).ToString();
            }
            catch (Exception)
            {
                var errMsg = string.Format("
找不到名为
'{0}'的值", paraName);
                throw new ArgumentException(errMsg);
            }
        }
    }

使用这个类也非常简单:

    string template = "Hello @Name! Welcome to C#!";
    string result = StrFormater.Format(template, new { Name = "World" });

模板中把要替换的属性前面加一个'@'符号即可,并不需要像RazorEngine那样加Model。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值