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

开源地址:

相关推荐
will_net3 小时前
Redis集群部署+Redis 链接地址放入Aollo +c#项目接入Redis
redis·c#·bootstrap
BuHuaX10 小时前
Lua 与 ToLua:运行机制及热更新原理
开发语言·unity·junit·c#·lua
asdzx6710 小时前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#
玩泥巴的12 小时前
源生成与 AOT 就绪的微信生态 .NET SDK:结构、能力边界与 API 定位方法
ai·微信·.net·agent·aot·roslyn
氷凌公子12 小时前
算法与UI拆分中遇到的问题及解决方式
c#·onnx·yolov26
1-1=013 小时前
C# 泛型
c#·.net·.netcore
有志冬瓜13 小时前
.NET Framework全部版本离线下载安装教程
安全·.net·软件需求
IT规划师14 小时前
Redis 数据类型全解 - Set 的三个真相:去重、标签、共同好友(四)
redis·.net