当前位置: 欣欣网 > 码农

C# 表达式动态解析神器:DynamicExpresso

2024-06-05码农

前言

推荐一个强大动态表达式解析器,方便我们在项目中,动态执行C#脚本。

项目简介

DynamicExpresso内置了解析逻辑,它能够将.NET的lambda表达式或委托转化为C#语句,并在内存中的动态执行。

它不生成任何汇编,而是构建了一个表达式树,在运行时执行。支持如加减乘除、比较、逻辑操作等基本运算符以及C#中的类型测试和转换。

可以声明和使用变量,包括自定义类型的实例;也可以设置参数,便于多次调用同一表达式时改变输入值。

能够直接从字符串解析出.NET委托或Lambda表达式,方便集成到业务逻辑中。

应用场景

  • 脚本化应用:创建一个环境让用户在运行时编写和执行C#代码片段。

  • 条件运行:根据不同的条件动态生成执行代码。

  • 动态数据过滤:构建动态的LINQ查询,用于数据库或其他数据源的过滤和检索。

  • 自动化工具:在自动化流程中,根据用户输入或配置文件执行特定的代码操作。

  • 项目优势

  • 兼容性:支持.NET Core 3.1及以上版本和.NET 4.6.2。

  • 性能:相比其他类似项目,DynamicExpresso有较好的性能表现。

  • 易用性:单个dll文件,无额外依赖,易于部署。

  • 语法丰富性:支持C#的部分语法特性,如条件运算符、三元运算符、类型检查等。

  • 简单使用方法

    1、返回结果

    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);

    2、定义变量

    using DynamicExpresso;
    //定义变量并赋值
    var target = new Interpreter().SetVariable("myVar"23);
    //输出:33
    Console.WriteLine(target.Eval("myVar + 10"));

    3、参数

    using DynamicExpresso;
    var interpreter = new Interpreter();
    //动态参数
    var parameters = new[] {
    new Parameter("x"23),
    new Parameter("y"7)
    };
    //根据传入参数,动态执行代码
    var result = interpreter.Eval("x + y", parameters);
    //输出30
    Console.WriteLine(result);


    4、标识

    using DynamicExpresso;
    var target = new Interpreter();
    //定义2个标识
    target.SetVariable("this"new Customer { Name = "John" });
    target.SetVariable("that"new Customer { Name = "thatJohn" });
    //使用this标识
    Console.WriteLine(target.Eval("this.Name"));
    //this可隐式使用
    Console.WriteLine(target.Eval("Name"));
    //使用that标识
    Console.WriteLine(target.Eval("that.Name"));
    classCustomer { publicstring Name { getset; } }



    项目地址

    https://github.com/dynamicexpresso/DynamicExpresso

    - EOF -

    推荐阅读 点击标题可跳转

    看完本文有收获?请转发分享给更多人

    推荐关注「DotNet」,提升.Net技能

    点赞和在看就是最大的支持❤️