使用DynamicExpresso实现表达式求值
2024-09-07 23:20:20
之前写了一篇Z.Expressions表达式计算的博客,直到最近才发现Z.Expressions不是免费的。Z.Expressions从2.0开始支持了NetCore,使用一段时期后会提示许可证到期,需要更新成最新的DLL,很不方便。最近在搜寻资料,发现了DynamicExpresso库,参考资料:https://www.cnblogs.com/songxingzhu/p/6737618.html
使用起来也很简单,一个简单的例子如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using DynamicExpresso;
7
8 namespace ConsoleApplication1
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 Interpreter interpreter = new Interpreter();
15 Dictionary<string, object> dict = new Dictionary<string, object>();
16
17 dict.Add("a", 1.0);
18 dict.Add("b", 2);
19 dict.Add("d", 4);
20 dict.Add("e", 5);
21
22 foreach (var v in dict)
23 {
24 object value = v.Value;
25 int para = 0;
26 if (int.TryParse(v.Value.ToString(), out para))
27 {
28 value = (float)para;
29 }
30 interpreter.SetVariable(v.Key, value);
31 }
32
33 Console.WriteLine(interpreter.Eval("a+b").ToString());
34 Console.WriteLine(interpreter.Eval("a*d").ToString());
35 Console.WriteLine(interpreter.Eval("b/d").ToString());
36 }
37 }
38 }
要注意的是除法运算时,如果都是整数,那么就存在为0的可能性,例如2/5。要避免这种情况可以将整数转换成浮点数,例如5改为5.0,这样计算结果为浮点数。
最新文章
- 如何利用FineBI做财务分析
- MongoDB 安装
- 【原创Android游戏】--猜数字游戏Version 0.1
- 38. Same Tree &;&; Symmetric Tree
- jquery的隐式类型转换
- JSTL&;EL(程序员必看之一)
- jQuery序列化后的表单值转换成Json
- vs2010中iostream.h出错
- iOS8 UITableView 分割条设置separator intent = 0 不起作用
- JavaScript实现全选和全不选
- linux命令技巧
- bittorrent 学习(二) LOG日志和peer管理连接
- CSS【06】:CSS显示模式
- Chrome快捷键大全
- 如何搭建hibernate框架
- gzip是一种数据格式,deflate是一种压缩算法
- OpenStack环境中的NFV实践
- jQuery之回到顶部
- Emgu.CV.CvInvoke”的类型初始值设定项引发异常
- Web中树形数据(层级关系数据)的实现—以行政区树为例