推荐2个C#开源脚本引擎, 方便我们在项目中,动态执行C#脚本。
一、 Eval-Expression.NET
https://github.com/zzzprojects/Eval-Expression.NET
Eval-Expression.NET是一个非常强大工具,使得开发人员可以动态编译和执行C#代码和表达式。通过C#反射,还能轻松访问公共和私有方法、字段、属性值,并创建对象实例。
使用方法
1、简单方法
using Z.Expressions;
int result = Eval.Execute<int>("X + Y", new { X = 1, Y = 2 });
//输出 3
Console.WriteLine(result);
2、复杂代码
using Z.Expressions;
int result = Eval.Execute<int>(@"
var list = new List<int>() { 1, 2, 3, 4, 5 };
var filter = list.Where(x => x < 4);
return filter.Sum(x => x);");
//输出 6
Console.WriteLine(result);
2、 DynamicExpresso
https://github.com/dynamicexpresso/DynamicExpresso
DynamicExpresso内置了解析逻辑,它能够将.NET的lambda表达式或委托转化为C#语句,并在内存中的动态执行。
它不生成任何汇编,而是构建了一个表达式树,在运行时执行。
支持如加减乘除、比较、逻辑操作等基本运算符以及C#中的类型测试和转换。
可以声明和使用变量,包括自定义类型的实例;也可以设置参数,便于多次调用同一表达式时改变输入值。
能够直接从字符串解析出.NET委托或Lambda表达式,方便集成到业务逻辑中。 支持.NET Core 3.1及以上版本和.NET 4.6.2, 支持C#的部分语法特性,如条件运算符、三元运算符、类型检查等。
使用方法
简单表达式
using DynamicExpresso;
var target = new Interpreter();
double result = target.Eval<double>("Math.Pow(x, y) + 5",
new Parameter("x", typeof(double), 10),
new Parameter("y", typeof(double), 2));
//输出105
Console.WriteLine(result);
变量
using DynamicExpresso;
//定义变量并赋值
var target = new Interpreter().SetVariable("myVar", 23);
//输出:33
Console.WriteLine(target.Eval("myVar + 10"));
最后推荐加入我的 , 里面包含7个教程,其中有:【 三层架构教程 】与【DDD 领域驱动设计架构教程 】。
- End -
分享一套.NetCore从入门到精通视频教程
点击下方公众号卡片,关注我
回复「 888 」,免费领取
觉得好看 点个在看👇