NetCore中使用DynamicExpresso、Z.Expressions、LambdaParser进行安字符串求值
例子如下:
Z.Expressions从2.0开始支持了NetCore,但是收费的。其它两者免费。建议使用DynamicExpresso,免费而且速度快。LambdaParser目前支持太少。
static void Main(string[] args)
{ Console.OutputEncoding = Encoding.Unicode; System.Diagnostics.Stopwatch sp = new Stopwatch();
sp.Start();
var code = "i<100&&s.Contains(\"测试\")";
var interpreter = new DynamicExpresso.Interpreter();
var result = interpreter.ParseAsDelegate<Func<int, string, bool>>(code, "i", "s");
//var result = interpreter.ParseAsExpression<Func<int, string, bool>>(code, "i", "s").Compile();
for (int i = ; i < ; i++)
{
var v = result(i, "我在测试" + i);//2213ms
//Console.WriteLine(v);
}
sp.Stop();
Console.WriteLine("time:" + sp.ElapsedMilliseconds + "ms"); //System.Diagnostics.Stopwatch sp = new Stopwatch();
//sp.Start();
////var code = @"
//// var list = new List<int>() { 1, 2, 3, 4, x };
//// var filter = list.Where(x => x < 4);
//// return filter.Sum(x => x); ";
//var code = "i<100&&s.Contains(\"测试\")";
////var result = Z.Expressions.Eval.Compile<Func<int, string, bool>>(code, "i", "s"); //for (int i = 0; i < 100000; i++)
//{
// var v = result(i, "我爱测试");
// //Console.WriteLine(v);
//}
//sp.Stop();
//Console.WriteLine("time:" + sp.ElapsedMilliseconds + "ms"); //var parse = new LambdaParser();
//while (true)
//{
// try
// {
// Console.WriteLine(new string('_', 20));
// var dics = new Dictionary<string, object>();
// dics.Add("x1", 32.0);
// dics.Add("x2", 23.0);
// dics.Add("x3", 34.5);
// dics.Add("x4", 34.5);
// dics.Add("s1", "my name is xxxxzhu!");
// dics.Add("b1", true);
// foreach (var item in dics)
// {
// Console.WriteLine(item.Key + "\t" + item.Value);
// }
// Console.WriteLine(new string('_', 20));
// Console.WriteLine("expr:");
// var expr = Console.ReadLine();
// var value = parse.Eval(expr, dics);
// Console.WriteLine("value======================" + value);
// }
// catch (Exception ex) { Console.WriteLine("error====================:" + ex.Message); }
//}
}
NetCore中使用DynamicExpresso、Z.Expressions、LambdaParser进行安字符串求值的更多相关文章
- 在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在进行项目开发的时候,刚好需要用到对字符串表达式进行求值的处理场景,因此寻找了几个符合要求的第三方组件LambdaParser.DynamicExpresso.Z.Expressions,它们各自功能 ...
- javascript中的所有内容都是一个对象:字符串、值、数组、函数…
javascript中的所有内容都是一个对象:字符串.值.数组.函数…此外,javascript允许自定义对象.javascript对象JavaScript提供多个内置对象,如字符串.日期.数组等.对 ...
- .NetCore中的日志(2)集成第三方日志工具
.NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...
- .NetCore中的日志(1)日志组件解析
.NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...
- 比如在vi中按ctrl+z
比如在vi中按ctrl+z有个命令可以恢复会话,我忘了,大家谁记得? 分享到: 对我有用[0] 丢个板砖[0] 引用 | 举报| 编辑 删除 管理 回复次数:8 hellwolf hellwo ...
- AutoMapper在asp.netcore中的使用
# AutoMapper在asp.netcore中的使用 automapper 是.net 项目中针对模型之间转换映射的一个很好用的工具,不仅提高了开发的效率还使代码更加简洁,当然也是开源的,htt ...
- netcore中的缓存介绍
Cache(缓存)是优化web应用的常用方法,缓存存放在服务端的内存中,被所有用户共享.由于Cache存放在服务器的内存中,所以用户获取缓存资源的速度远比从服务器硬盘中获取快,但是从资源占有的角度考虑 ...
- 在netcore中如何注入同一个接口的多个实现
netcore中自带了Ioc框架,这也影响了我们的编码习惯,以前都是静态类或者直接new对象,现在有了Ioc框架的支持,我们也不必守旧,应当使用起来,接受这种对象管理方式.使用过java的同仁,都习惯 ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
随机推荐
- WordPress主题开发:实现分页功能
注意的是这个受后台这里的文章篇数设置所影响~ 一.使用内置方法 (WordPress 4.1以前无效) the_posts_pagination 输出分页式导航,用法: <?php the_po ...
- .NET:如何并行的从集合中返还元素?
实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...
- jQuery Ajax 上传文件改进
如果用户取消上传后 背景 提示自动消失了.... 修正Bug.... 同时也更新了不同上传类型的提示字体大小... 2017-05-26 增加了鼠标释放提示 先看之前的效果: 再看现在的效果: 升级 ...
- 如何删除mac keeper
如果不小心安装了mac keeper,基本是无法删除的,而且16年以前的方法都不管用.可以这样删除,我已经测试过了,下载https://data-cdn.mbamupdates.com/web/mba ...
- c#录音和放音,超简单!不用DirectX
最近在做android与C#录音并互相通信的小东西.但是卡在C#录音这儿了.找了好久,说的都是DirectX,可是我总是安装不上,这才找到了这个简单的录音方法.当然,如果你想要录得好并且处理音频,那还 ...
- List集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算.例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的ty ...
- Java的四个基本特性和对多态的理解
Java面向对象的四大基本特性:抽象.封装.继承.多态. 多态的实现方式:重载.继承.接口 Java中多态性的实现 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是 ...
- [填坑]解决"Your MaintenanceTool appears to be older than 3.0.2. ."问题
之前我写过QT5.9版本在更新组件时出现“要继续此操作,至少需要一个有效且已启用的储存库”问题,得到了网友的热心转载,说明遇到此问题的人不在少数. 原文地址:https://blog.csdn.net ...
- [转]PostgreSQL Replication之扩展与BDR
原文:https://www.cnblogs.com/xmzzp/p/6284300.html postgres 实现master, slave ,且master是多主. -------------- ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十七)Elasticsearch-6.2.2集群安装,组件安装
1.集群安装es ES内部索引原理: <时间序列数据库的秘密(1)—— 介绍> <时间序列数据库的秘密 (2)——索引> <时间序列数据库的秘密(3)——加载和分布式计算 ...