表达式计算开源组件(NCalc.NetCore)
首先,这款组件是开源的,NCalc是.net中的一个数学表达式求值程序。NCalc可以解析任何表达式并计算结果,包括静态或动态参数和自定义函数。
Nuget安装依赖,如下:

简单表达式:
Expression e = new Expression("2 + 3 * 5");
var result=e.Evaluate();
支持.NET数据类型
支持int,date,float,bool,string等数据格式
处理Math中的数学函数
Debug.Assert(0 == new Expression("Sin(0)").Evaluate());
Debug.Assert(2 == new Expression("Sqrt(4)").Evaluate());
Debug.Assert(0 == new Expression("Tan(0)").Evaluate());
自定义计算表达式
public static object Calcuate(string expression,Snapshot snapshot,Status status)
{
    Expression e = new Expression(expression);
    e.EvaluateFunction += delegate (string name, FunctionArgs args)
    {
        if (name.Equals("Tag"))
        {
            string tagName = args.Parameters[0].Evaluate().ToString();
            RTData rtData=snapshot.ReadTag(tagName);
            args.Result = rtData.Value;
        }
        else if (name.Equals("Loop"))
        {
            string loopName = args.Parameters[0].Evaluate().ToString();
            args.Result = status.GetLoopValue(loopName);
        }
    };
    return e.Evaluate();
}
其中Tag,Loop就是自定义函数,可以根据自身逻辑进行编写。
调用代码基本是这样,这是一个递归调用的过程,先解析出Tag和Loop,然后再依次解析参数。
需要注意的是每个函数返回的值类型必须一致,否则在做四则运算时就会报错了,这个很好理解。

表达式计算开源组件(NCalc.NetCore)的更多相关文章
- .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用
		
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...
 - .NET 表达式计算:Expression Evaluator
		
Expression Evaluator 是一个轻量级的可以在运行时解析C#表达式的开源免费组件.表达式求值应该在很多地方使用,例如一些工资或者成本核算系统,就需要在后台动态配置计算表达式,从而进行计 ...
 - C#动态表达式计算(续2)
		
上两篇废话太多,这一次我就不多说了,由于代码比较简单,可以直接从https://github.com/scottshare/DynamicExpress.git地址下载. 以下说明一下使用方法: Dy ...
 - Fel表达式计算引擎学习
		
转载原文地址:Fel是轻量级的高效的表达式计算引擎 Fel的问题 Fel的问题 Fel是轻量级的高效的表达式计算引擎 Fel在源自于企业项目,设计目标是为了满足不断变化的功能需求和性能需求. Fel是 ...
 - QuantLib 金融计算——基本组件之 ExchangeRateManager 类
		
目录 QuantLib 金融计算--基本组件之 ExchangeRateManager 类 概述 Money 类中的汇率转换配置 ExchangeRateManager 函数 如果未做特别说明,文中的 ...
 - SpringCloud微服务:阿里开源组件Nacos,服务和配置管理
		
源码地址:GitHub·点这里||GitEE·点这里 一.阿里微服务简介 1.基础描述 Alibaba-Cloud致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开 ...
 - .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)
		
什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...
 - react native 的图表开源组件react-native-chart-android
		
react-native-chart-android是一个图表开源组件,使用方法可以去这里 由于需要在数据上加上触摸事件,而github上没有说明看源码找了半天才找到下面的解决方法,特此记录一下: 在 ...
 - .net 开源组件
		
文章转自:http://www.cnblogs.com/asxinyu/p/dotnet_opensource_project_3.html 在前2篇文章这些.NET开源项目你知道吗?让.NET开 ...
 
随机推荐
- 高性能可扩展mysql 笔记(一)数据库表、索引、SQL语句设计规范
			
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 项目说明:该笔记的背景为电商平台项目,电商项目由于其高并发.多线程.高耗能等特性,在众多的项目类型中涉及 ...
 - Java实现 LeetCode 804 唯一摩尔斯密码词 (暴力)
			
804. 唯一摩尔斯密码词 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", " ...
 - (Java实现) 最大团问题 部落卫队
			
首先介绍下最大团问题: 问题描述:给一个无向图G=(V,E) ,V是顶点集合,E是边集合.然后在这顶点集合中选取几个顶点,这几 个顶点任意两个之间都有边在E中.求最多可以选取的顶点个数.这几个顶点就构 ...
 - Java中继承的详细用法
			
关于上一篇构造方法后的继承方法 构造方法链接 extends是继承的关键字 例: 下面的代码BB和CC就是AA的子类 允许一个父类有多个子类,但不允许一个子类有多个父类 /*final*/ class ...
 - 第四届蓝桥杯JavaB组国(决)赛真题
			
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字 ...
 - Java编程技术之浅析JVM内存
			
JVM JVM->Java Virtual Machine:Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 基本认知: ...
 - ios支付签名认证
			
一.解析json中参数的含义 private Long id; @ApiModelProperty(value = "创建时间") private Date gmtCreate; ...
 - Photoshop 使用过程中遇到的问题
			
1.关于图片像素 根据不同用途设置不同的分辨率: 印洗照片300像素及以上, 高清写真海报96-200像素, 网络图片网页界面72像素, 大型喷绘25到50像素
 - GatewayWorker与ThinkPHP等框架结合
			
使用GatewayWorker时开发者最关心的是如何与现有mvc框架(ThinkPHP Yii laravel等)整合,以下是官方推荐的整合方式. 见示意图: ## 总体原则 现有mvc框架项目与Ga ...
 - Nice Jquery Validator  事件
			
订阅 .on("validation") 描述:每次验证完一个字段,都会触发 validation 事件,通过该事件可以获取到当前验证字段的验证结果. 示例: $('#form') ...