AScript之字符串模板

AScript是一个开源的C#动态脚本解析执行引擎,版本1.8.1新增了字符串模板转化功能。

 

我们来对比两种字符串模板方案:

 

方案一

比较常用的字符串模板方案,使用Replace替换变量。

尊敬的 {userName}{userSex} 您好,祝您{userAge}岁生日快乐!

转化逻辑如下:

1 // 模拟获取业务数据
2 var user = new { Name = "张三", Sex = 1, Birthday = new DateTime(1990, 10, 8), CreateTime = new DateTime(2026, 5, 1) };
3 // 计算模板中需要的变量
4 var userName = user.Name;
5 var userSex = user.Sex == 0 ? "女士" : "先生";
6 var useAge = (DateTime.Now.Year - user.Birthday.Year).ToString();
7 // 替换模板中的变量
8 var result = template.Replace("{userName}", userName).Replace("{userSex}", userSex).Replace("{userAge}", userAge);
9 // 结果:尊敬的 张三先生 您好,祝您36岁生日快乐!

 

方案二

动态脚本转化模板,字符串中使用${}包含脚本块。

尊敬的 ${user.Name}${user.Sex == 0 ? '女士' : '先生'} 您好,祝您${DateTime.Now.Year - user.Birthday.Year}岁生日快乐!

转化逻辑如下:

1 // 模拟获取业务数据
2 var user = new { Name = "张三", Sex = 1, Birthday = new DateTime(1990, 10, 8), CreateTime = new DateTime(2026, 5, 1) };
3 var script = new Script();
4 // 注入业务数据
5 script.Context.SetVar("user", user);
6 // 转化模板
7 var result = script.Translate(template)?.Trim();
8 // 结果:尊敬的 张三先生 您好,祝您36岁生日快乐!

 

两个方案对比

方案一:代码与模板中的变量名需要保持一致,变量固定,模板中新增变量需要同步代码修改;

方案二:代码只需注入业务数据即可,不关心模板如何使用,后期维护非常灵活。

 

高级应用

  • 脚本块中定义的变量和函数不会回写到上下文;
  • 当前脚本块可以调用前一个脚本块中定义的变量和函数;
  • ${}脚本块会将最后一条语句执行结果拼接到字符串中;
  • @{}脚本块只执行,不拼接结果,常用于变量计算或者函数定义。
@{
    int calcAge(DateTime birthday) {
        return DateTime.Now.Year - birthday.Year
    }
    var userSex = user.Sex == 0 ? '女士' : '先生';
    //var userAge = DateTime.Now.Year - user.Birthday.Year;
    //var userAge = calcAge(user.Birthday);
}
尊敬的 ${user.Name}${userSex} 您好,祝您${calcAge(user.Birthday)}岁生日快乐!

模板转化逻辑见 方案二。

 

大家在项目应用中是如何设计字符串模板的呢?

 

nuget安装包:install-package AScript

开源地址:

 

image

 

 

 

posted @ 2026-11-03 19:59  rockey627  阅读(31)  评论(0)    收藏  举报