DynamicExpresso:强大的动态执行C#表达式解析器

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

01 项目简介

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

它不生成任何汇编,而是构建了一个表达式树,在运行时执行。

支持如加减乘除、比较、逻辑操作等基本运算符以及C#中的类型测试和转换。

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

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

02 应用场景

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

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

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

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

03 项目优势

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

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

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

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

04 简单使用方法

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"));class Customer { public string Name { get; set; } }

05 项目地址

https://github.com/dynamicexpresso/DynamicExpresso

- End -

推荐阅读

MudBlazor:一个UI简洁美观漂亮的Blazor开源组件!

盘点下5个Winform UI开源控件库

一个基于EFCore+Lucene实现的全文搜索引擎库

一套 .NET开发的邮箱Mail开源库

一个超快低延迟.Net网络通信库:支持TCP, SSL, UDP, HTTP,HTTPS, WebSocket多协议

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java类与变量与方法

Java内存结构分析&#xff1a; 栈&#xff1a;存储基本数据类型、局部变量 堆&#xff1a;存放对象和数组 方法区&#xff1a;常量池()常量&#xff0c;比如字符串、加载类信息 创建对象时&#xff0c;在方法区加载类信息&#xff0c;在堆开辟空间&#xff0c;栈上的变量记录堆…

InnoDB 四大特性知道吗?

InnoDB 是 MySQL 数据库中的一种存储引擎&#xff0c;它具有许多特性&#xff0c;但通常被认为有以下几个主要特点&#xff1a; 行级锁定&#xff1a;InnoDB 支持行级锁定&#xff0c;这意味着它在处理并发事务时&#xff0c;只锁定那些需要修改的行&#xff0c;而不是整个表或…

独享IP VS 原生IP,二者的区别与定义详解

原生IP&#xff1a;原生IP是指由Internet服务提供商&#xff08;ISP&#xff09;直接分配给用户的IP地址&#xff0c;这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址&#xff0c;与用户的物理位置直接相关。在跨境电商中&…

2024教资认定报名流程,点赞收藏!

2024年要进行教资认定的宝子们提早准备 &#x1f525;教资认定网上报名流程概览 一、进入教资认定网报入口 二、进行实名核验 三、申请网报时间查询 四、个人信息维护 五、认定申请报名 &#x1f525;教资认定所需材料 1⃣️身份证 2⃣️户口本&#xff0f;居住证&#xff0f;学…

基本 MOSFET 恒流源

恒流源在电路分析练习和网络定理中占有重要地位&#xff0c;然后它们似乎或多或少消失了。。。除非你是IC设计师。尽管在典型 PCB 设计中很少遇到&#xff0c;但电流源在模拟 IC 领域却无处不在。这是因为它们 1) 用于偏置&#xff0c;2) 作为有源负载。 偏置&#xff1a; 用作…

Docker搭建可道云

Docker搭建可道云&#xff08;存储&#xff09; 文章目录 Docker搭建可道云&#xff08;存储&#xff09;介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、搭建可道云私有云盘3.1、编写Dockerfile3.2、上传资源到指定目录3.3、查看目录下所有资源 四、构建镜像五、…

【学术小白成长之路】01三方演化博弈(基于复制动态方程) -基础概念与模型构建

1.演化博弈基础知识 经典博弈论起源于1944年Von Neumann和Morgenstern合著的《博弈论与经济学行为》&#xff0c;是研究理性决策者之间竞争和合作关系的数学方法。 博弈论主要研究完全理性的博弈个体为实现利益最大化而做的策略选择&#xff0c;在过去几十年取得了极大发展&am…

计算机网络--物理层

计算机网络--计算机网络概念 计算机网络--物理层 计算机网络--数据链路层 计算机网络--网络层 计算机网络--传输层 计算机网络--应用层 1. 基本概念 物理层的概念&#xff1a;物理层解决如何在在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输…

Python 如何判断一组数呈上升还是下降趋势

在数据分析和统计处理中&#xff0c;我们经常需要判断一组数的趋势是上升还是下降。这在金融市场分析、销售数据监控以及科学研究中都十分常见。本文将介绍如何使用Python来判断一组数的趋势&#xff0c;并结合实际案例进行详细阐述。 一、基本方法 判断一组数的趋势主要有以…

Python字符串操作 -- 拆分字符串(对一列数据批量操作)

先创建一个列表&#xff0c;由两段字符串组成&#xff1a; df [第一段话&#xff0c;就到此为止。,第二段话&#xff0c;下次再说&#xff1f;或者下下次。] 1.拆分后的句子&#xff0c;每个句子单独为一行 df1 [] # 创建一个空列表放拆分后的数据 for i in range(len(df…

【CS.DB】从零到精通:这可能是全网最全面最强大的SQL入门教程

文章目录 1. 什么是SQL&#xff1f;1.1 SQL的历史1.1.1 SQL的标准化过程 2. SQL基础语法2.1 数据库操作2.1.1 创建数据库2.1.2 删除数据库 2.2 表操作2.2.1 创建表2.2.2 删除表2.2.3 修改表 2.3 数据操作2.3.1 插入数据2.3.2 更新数据2.3.3 删除数据 2.4 查询数据2.4.1 基本查询…

React Native 之 expo-cli使用 (二十四)

expo-cli是用于创建、运行和部署Universal Expo和React Native应用程序的工具。 1. 安装expo-cli 命令行或终端中运行以下命令来全局安装expo-cli&#xff1a; npm install -g expo-cli # 或者使用yarn yarn global add expo-cli//安装完成后&#xff0c;你可以通过运行ex…

什么是(RAG)检索增强生成?

检索增强生成&#xff08;Retrieval-Augmented Generation&#xff09; 在人工智能领域&#xff0c;生成式模型&#xff08;Generative Models&#xff09;如语言模型&#xff08;Language Models, LMs&#xff09;&#xff0c;能够根据给定的输入生成连贯且有意义的文本。然而…

读取文件

自学python如何成为大佬(目录):自学python如何成为大佬(目录)_利用python语言智能手机的默认语言实战一-CSDN博客 在Python中打开文件后&#xff0c;除了可以向其写入或追加内容&#xff0c;还可以读取文件中的内容。读取文件内容主要分为以下几种情况&#xff1a; 1 读取指…

react 基础样式的控制(行内和className)

import ./index.cssconst style{color:red,font-size:150px }function App() {return (<div className"App"><h1>行内样式控制</h1><h1 style{{color:red,font-size:150px}} >asd </h1><span style{style} >asd </span>&l…

Docker——容器技术的发展

容器技术发展史 一、Jail时代 ​ 1979年&#xff0c;贝尔实验室发明了chroot&#xff1b;当一个系统软件编译完成之后&#xff0c;整个测试环境的变量便会发生变化&#xff1b;chroot就是将一个进程的文件系统进行隔离&#xff0c;将不同进程的的根目录发生改变&#xff1b;这…

Markdown入门语法笔记

Markdown入门语法笔记 引言 Markdown是一种轻量级的文本标记语言&#xff0c;基于“内容才是本质”的理念进行设计&#xff0c;排版格式简洁自然&#xff0c;让创作者将更多时间集中在内容创作而非排版上。Markdown在当今世界上应用非常广泛&#xff0c;论文排版、说明文档、…

2024年跨平台应用解决方法

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 很久没有写这类high-level的文章了,本身这类框架就一直层出不穷,但是其中历久弥坚,坚韧不拔的框架又有多少呢? 首先考虑到学习成本以及掌握一些编程语言在工作、学习生态上的价值,给这些东西适用生态划分一下. Reac…

tippecanoe-enumerate解释解释和使用示例

tippecanoe-enumerate 是 Tippecanoe 工具集中的一个实用命令,用于枚举和显示 MBTiles 文件中的所有瓦片信息。它可以帮助您查看和验证 MBTiles 文件中包含的瓦片数量、缩放级别、坐标等详细信息。这对于了解数据的分布和结构非常有用。 主要功能 枚举瓦片:列出 MBTiles 文件…

CentOS7 MySQL5.7.35主从 不停机搭建 以及配置

如需安装MySQL&#xff0c;参照MySQL 5.7.35 安装教程 https://blog.csdn.net/CsethCRM/article/details/119418841一、主&从 环境信息准备 1.1.查看硬盘信息&#xff0c;确保磁盘够用&#xff08;主&从&#xff09; df -h1.2.查看内存信息 &#xff08;主&从&am…