首页 > 编程语言 >Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能

Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能

时间:2025-01-05 20:33:31浏览次数:3  
标签:Execute C# Javascript int 开源 result Eval Net

我们都知道在JavaScript中,我们可以通过Eval来执行JavaScript字符串代码。

下面推荐一个.Net版本的Eval的开源项目。

01 项目简介

Eval-Expression.NET是一个非常强大工具,使得开发人员可以动态编译和执行C#代码和表达式。通过C#反射,还能轻松访问公共和私有方法、字段、属性值,并创建对象实例。

02 使用示例

1、依赖库安装

Install-Package Z.Expression.NET

2、简单公式

using Z.Expressions;

int result = Eval.Execute<int>("X + Y", new { X = 1, Y = 2 });
//输出 3
Console.WriteLine(result);

3、复杂代码

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

4、参数占位符

int result = Eval.Execute<int>("{0} + {1}", 1, 2);

5、动态类的属性

dynamic expandoObject = new ExpandoObject();
expandoObject.X = 1;
expandoObject.Y = 2;
int result = Eval.Execute<int>("X + Y", expandoObject);

6、字符串扩展方法

string s = "X + Y";
int result = s.Execute<int>(new { X = 1, Y = 2 });

7、委托

//委托
var compiled = Eval.Compile<Func<int, int, int>>("X + Y", "X", "Y");

int result = compiled(3, 4);
//输出 7
Console.WriteLine(result);

8、扩展方法委托

using Z.Expressions;

//扩展方法委托
string s = "X + Y";
var compiled = s.Compile<Func<int, int, int>>("X", "Y");

//输出 7
int result = compiled(3, 4);
Console.WriteLine(result);

03 项目地址

https://github.com/zzzprojects/Eval-Expression.NET

- End -

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

我是编程乐趣,一个.Net开发经验老程序员,欢迎“关注”我,每天为你分享开源项目和编程知识。
也欢迎加入【.Net技术编程交流社区】,和大家共同学习交流!,
点击加入https://bbs.csdn.net/topics/613465368

推荐阅读

Garnet:微软官方基于.Net 8开源缓存系统,可无需任何改动直接替代Redis,而且还更高性能!

ExcelDataReader:一个.Net高性能Excel开源读取器

一个C#开源工具库,集成了超过1000个扩展方法

13个热门.Net开源项目

盘点6个.Net热门AI项目

标签:Execute,C#,Javascript,int,开源,result,Eval,Net
From: https://blog.csdn.net/daremeself/article/details/144923788

相关文章

  • 8.Redis底层数据结构——ziplist和listpack
    一、ziplist1.1ziplist结构Redis采用紧凑的字节数组表示一个压缩列表,压缩列表结构示意图如下:<zlbytes><zltail><zllen><entry><entry>...<entry><zlend>zlbytes:压缩列表的字节长度,占4个字节,因此压缩列表最多有2*32-1个字节。zltail:压缩列表尾元素相对于压缩......
  • SQL 基础教程 - SQL SELECT 语句
    SQL SELECT 语句SELECT语句用于从数据库中选取数据。SQLSELECT语句SELECT语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。SQLSELECT语法SELECTcolumn1,column2,...FROMtable_name;与SELECT*FROMtable_name;参数说明:column1,co......
  • 基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印) 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)figureplot(Error2,'linewidth',2);gridonxlabel('迭代次数');ylabel('遗传算法优化过程');legend('Averagefitness......
  • PCB布线如果不考虑空间闲置,走线越粗越好吗?
    不是越宽越好。对于有阻抗要求的信号,比如USB差分、HDMI差分、射频,信号线的宽度需要满足阻抗要求。(通过改变相邻层介质厚度、介质的介电常数、线宽,来达到目标阻抗)对于没有阻抗要求的信号。在不考虑空间利用、短路风险、相互干扰的时候,信号线越宽越好:1.更大的通流能力(对于电源......
  • 题解:UVA10482 The Candyman Can
    UVA10482TheCandymanCan思路记总重量为\(sum\)。因为\(n\le32\)所以可以暴力。使用动态规划,\(dp_{i,j}\)代表第\(1\)组重量为\(i\),第\(2\)组重量为\(j\)(则第\(3\)组重量为\(sum-i-j\))是否可以达到。最后再暴力枚举取所有\(\max(i,j,sum-i-j)-\min(i,j,sum-......
  • 7.3 Location Tracking 位置跟踪
    https://lalrpop.github.io/lalrpop/location_tracking.htmlSometimesitmaybehelpfultoknowwhereintheinputstreamaparticulartokenwasencountered.Forexample,thiscanbeusefulwhengeneratinguser-visiblemessagesthatreferencespecificpoints......
  • 学习随记:word2vec的distance程序源码注释、输入输出文件格式说明
    word2vec中有5个程序,其中demo-word.sh中涉及两个:word2vec、distance。考虑到distance比较简单,所以我从这个入手,希望通过简单代码理解如何在一个高维数据空间计算距离(查找)。一维数据的查找,一般是通过二分法进行比较,找到完全相等的元素。完全相等本质是距离为0.推论,高维词向量......
  • WSL Ubuntu clone仓库报错RPC failed; curl 56 GnuTLS recv error (-24): Decryption
    问题user@user:~/Work/1-2025/phxpaxos$gitclonehttps://gitee.com/tjopenlab/phxpaxos.gitCloninginto'phxpaxos'...remote:Enumeratingobjects:6410,done.remote:Countingobjects:100%(6410/6410),done.remote:Compressingobjects:100%(4006......
  • 7.1 Generating files in the source tree 在源代码树中生成文件
    https://lalrpop.github.io/lalrpop/generate_in_source.htmlUptoversion0.15,LALRPOPwasgeneratingitsfilesinthesamedirectoryoftheinputfiles.Since0.16,filesaregeneratedintheCargo'soutputdirectory.MST--直到版本0.15,LALRPOP在输入文件的......
  • STM32-笔记36-ADC(模拟/数字转换器)
    一、什么是ADC?        全称:Analog-to-DigitalConverter,指模拟/数字转换器。        ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。12位ADC是一种逐次逼近型模拟数字转换器(0~4095(2^12))。它有多达18个......