用 C# 玩转 Scriban:自动生成报告、代码、文本,效率提升 10 倍

在现代软件开发中,动态生成文本、报告甚至代码已经成为常态。Scriban 是一个功能强大的 .NET 模板引擎,它语法简洁、灵活,能帮你极大提高工作效率。本文将从基础到高级,结合 C# 展示 Scriban 的使用方法,让你轻松实现自动化生成。


1. 安装与引入 Scriban

首先,使用 NuGet 安装:

复制代码
Install-Package Scriban

在 C# 中引用:

复制代码
using Scriban;
using Scriban.Runtime;

2. 基础模板语法

Scriban 支持:

  • 变量输出

    {{ name }} // 输出变量
    {{ score + 10 }} // 输出表达式结果

  • 注释

    {# 这是注释 #}

  • 条件语句

    {% if score >= 60 %}
    Pass
    {% else %}
    Fail
    {% end %}

  • 循环语句

    {% for student in students %}
    {{ student.Name }} - {{ student.Score }}
    {% end %}


3. 在 C# 中渲染模板

复制代码
var templateText = @"
Hello {{ name }}!

{% if score >= 60 %}
Congratulations! You passed with {{ score }} points.
{% else %}
Sorry, you failed with {{ score }} points.
{% end %}

Your grade: {{ grade }}
";

var template = Template.Parse(templateText);

var model = new
{
    name = "Alice",
    score = 78,
    grade = "B+"
};

var result = template.Render(model);
Console.WriteLine(result);

输出:

复制代码
Hello Alice!

Congratulations! You passed with 78 points.

Your grade: B+

4. 绑定集合数据与循环

复制代码
var students = new[]
{
    new { Name = "Alice", Score = 78 },
    new { Name = "Bob", Score = 55 },
    new { Name = "Charlie", Score = 92 }
};

var templateText = @"
Student Scores:
{% for student in students %}
  - {{ student.Name }}: {{ student.Score }} points
{% end %}
";

var template = Template.Parse(templateText);
var model = new { students };
var result = template.Render(model);
Console.WriteLine(result);

输出:

复制代码
Student Scores:
  - Alice: 78 points
  - Bob: 55 points
  - Charlie: 92 points

5. 注入自定义函数

你可以在模板中调用 C# 函数,实现复杂逻辑:

复制代码
var templateText = @"
Hello {{ name }}!
Your next score prediction: {{ predict_next_score(score) }}
";

var template = Template.Parse(templateText);

var model = new ScriptObject();
model["name"] = "Alice";
model["score"] = 78;

// 注入 C# 函数
model.Import("predict_next_score", new Func<int,int>(score => score + 5));

var context = new TemplateContext();
context.PushGlobal(model);

var result = template.Render(context);
Console.WriteLine(result);

输出:

复制代码
Hello Alice!
Your next score prediction: 83

6. 模板拆分与复用

大型项目建议拆分模板文件:

header.scriban

复制代码
<h1>Student Report</h1>

body.scriban

复制代码
{% include 'header.scriban' %}
<ul>
{% for student in students %}
  <li>{{ student.Name }} - {{ student.Score }}</li>
{% end %}
</ul>

C# 渲染:

复制代码
var template = Template.Parse(System.IO.File.ReadAllText("body.scriban"));
var students = new[]
{
    new { Name = "Alice", Score = 78 },
    new { Name = "Bob", Score = 55 }
};
var model = new { students };
var result = template.Render(model);
Console.WriteLine(result);

7. 高级示例:循环 + 条件 + 函数

复制代码
var templateText = @"
{% for student in students %}
  {{ student.Name }} - {{ student.Score }} points
  {% if student.Score >= 60 %}
    Pass, next target: {{ next_target(student.Score) }}
  {% else %}
    Fail, try again!
  {% end %}
{% end %}
";

var template = Template.Parse(templateText);

var model = new ScriptObject();
var students = new[]
{
    new { Name = "Alice", Score = 78 },
    new { Name = "Bob", Score = 55 }
};
model["students"] = students;

// 注入 C# 函数
model.Import("next_target", new Func<int,int>(score => score + 10));

var context = new TemplateContext();
context.PushGlobal(model);
var result = template.Render(context);
Console.WriteLine(result);

输出:

复制代码
Alice - 78 points
Pass, next target: 88
Bob - 55 points
Fail, try again!

8. 总结

使用 C# + Scriban,你可以:

  • 自动生成报告、文档、代码模板

  • 灵活绑定数据和自定义函数

  • 轻松管理复杂模板结构

  • 大幅提升开发效率(效率提升 10 倍不是夸张)

Scriban 简单易学,功能强大,是每个 C# 开发者提高自动化能力的必备利器。

相关推荐
勤奋的树懒3 小时前
从手写 SQL 到 Windows 工具:致远 OA 文件清理实践
数据库·sql·windows server·致远oa
笃行3503 小时前
OceanBaseVS金仓:一条 SQL 的两条路——KingbaseES 的性能竞争力从哪来
数据库
其实防守也摸鱼3 小时前
每天一个知识点——RCE漏洞
运维·服务器·数据库·windows·安全·github·漏洞
TDengine (老段)3 小时前
TDengine 常见问题 TOP2
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
笃行3503 小时前
数据迁移工具 KDMS 帮我把一本糊涂账算清了
数据库
笃行3504 小时前
SQLServer数据库迁移实录:十年老系统搬上 KingbaseES,T-SQL 基本没重写
数据库
落魄大学生之流水线上谋生计5 小时前
Java并发核心机制详解:线程池、CAS、AQS、锁升级
java·开发语言·数据库
Wang's Blog6 小时前
Java框架快速入门: Spring Security+OAuth2之邮件验证码发送(SMTP与API方式)
java·数据库·spring
XiaoZhenHua986 小时前
C#工业机器视觉Recipe配方系统设计:多型号、多相机、多工位参数如何统一管理
c#·软件架构·机器视觉·工业自动化·工业软件·recipe
砚底藏山河7 小时前
容错重试与指数退避:网络抖动手抖不再丢数据(魔码量化实战 #04)
java·数据库·python·金融