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 ...
随机推荐
- ssh 多条命令执行
格式:ssh user@ip command 单条命令:ssh user@ip command1 多条命令:ssh user@ip "command1;command2" 不加双引 ...
- 一文犀利看懂中美贸易战 z
如今的中国面对着前所未有的经济全球化的大环境.面对着如何成为创新性国家的重任. 钛媒体注:美国东部时间 7 月 6 日凌晨0:01 分,美国正式开始对 340 亿美元的中国产品加征 25% 的关税,这 ...
- 斯巴达克斯诅咒者之战第三季/全集Spartacus迅雷下载
本季Spartacus 3第三季(2013)看点:<斯巴达克斯>系列是美国Starz电视网历史上的首部原创作品,凭借其重口味的流血镜头.香艳的画面.血腥的打斗场面和优良的制作一经推出就瞬间 ...
- activity启动流程速记笔记
Activity.startActivity(Intent intent)----Activity.startActivityForResult(Intent intent)----Instrumen ...
- Material Designer的低版本兼容实现(四)—— ToolBar
Toolbar其实是一个ActionBar的变体,大大扩展了Actionbar.我们可以像对待一个独立控件一样去使用ToolBar,可以将它放到屏幕的任何位置,不必拘泥于顶部,还可以将它改变高度 ...
- Spring data jpa Specification查询关于日期的范围搜索
代码: 时间格式化类型: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat s ...
- .Net Core Bitmap位图处理
截止.Net Core 2.0 目前官方类库的API中不支持Bitmap System.Drawing.Primitives 这是官方的一个Drawing库,但是没有Bitmap.Graphics等很 ...
- 使用强大的 Mockito 测试框架来测试你的代码
原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...
- TFS中查看我的所有签入迁出记录 TFS 怎么查看所有的修改
[源代码资源管理器]=>左边窗口目录树选中一行项目=>右键 查看历史记录=>在历史记录中,双击变更集即可以看到某一次变更的所有记录.
- Maven 入门指南
为什么要用 Maven? Maven 主要帮助用户完成以下 3 个方面的工作: 生命周期管理,便捷的构建过程: 依赖管理,方便引入所需依赖 Jar 包: 仓库管理,提供统一管理所有 Jar 包的工具: ...