首页 > 其他分享 >NCalc 学习笔记 (二)

NCalc 学习笔记 (二)

时间:2023-06-20 09:47:15浏览次数:26  
标签:NCalc Console Evaluate 笔记 学习 new Expression 表达式

简介

NCalc 是一个能够进行表达式计算的一系列程序集( Assembly )。我们主要使用 Expression 类,这个类有一个函数 Evaluate() 能够计算表达式的值。表达式采用字符串形式传入。

举例:

Expression e = new Expression("2 * 3");
  object result = e.Evaluate();

Console.WriteLine(result);

很简单,创建一个 Expression 对象,通过构造函数传入需要计算的表达式字符串。调用 Evaluate() 方法进行解析,得到计算结果。

大小写敏感

NCalc 默认对大小写敏感,如果想要忽略大小写,只需要添加一个参数即可,

Expression e = new Expression("aBs(-1)", EvaluateOptions.IgnoreCase)
Debug.Assert(1M, e.Evaluate());

错误处理

如果表达式有语法错误,求值会抛出 EvaluationException。

try
{
    new Expression("(3 + 2").Evaluate();
}
catch(EvaluationException e)
{
    Console.WriteLine("Error catched: " + e.Message);
}

当然,我们也可以在求值之前通过 HasErrors() 函数来检测语法错误。

Expression e = new Expression("a + b * (");
if(e.HasErrors())
{
    Console.WriteLine(e.Error);
}

表达式缓冲

一个 Expression 对象只会被编译一次。因此通过改变参数来重用表达式对象能够提高程序性能。这样每次计算就只需要遍历表达式树就好了。

实际上,每个编译过的表达式都会缓冲起来,我们完全不需要自己考虑重用表达式。

使用 CacheEnabled 可以从框架层面更改默认设置。

Expression.CacheEnabled = false;

也可以对某个特定的表达式对象进行设置

Expression e = new Expression("1 + 1", EvaluateOption.NoCache);

 

标签:NCalc,Console,Evaluate,笔记,学习,new,Expression,表达式
From: https://www.cnblogs.com/shijiehaiyang/p/17492773.html

相关文章

  • NCalc 学习笔记 (一)
    简单表达式Expressione=newExpression("2+3*5");Debug.Assert(17==e.Evaluate());计算.NET数据类型Debug.Assert(123456==newExpression("123456").Evaluate());//integersDebug.Assert(newDateTime(2001,01,01)==newExpression(&quo......
  • NCalc 学习笔记 (四)
    值值是代表具体元素的一个终端口令(Avalueisaterminaltokenrepresentingaconcreteelement),它可以是:+整数(Int32)+浮点数(Decimal)(与Double相比,有更高的精度和更小的取值范围)+科学计数(Double)+日期(DateTime)+布尔值(bool)+字符串(String)+函数+参数整数123......
  • NCalc 学习笔记 (三)
    运算符毋庸置疑,表达式支持各种基本的运算符。各种运算符的优先级由高到低如下: 原子运算符(,)单目运算符!,not,-,~(按位取反)幂次运算符(原文作者遗漏了,他写了位运算符&,|,^(xor),<<,>>)乘除运算符*,/,%加减运算符+,-关系运算符=,==,!=,<>,<,<=,......
  • NCalc 学习笔记 (五)
    函数NCalc本身已经实现的函数列表如下:函数名描述用例用例结果Abs返回绝对值Abs(-1)1MAcos返回余弦值对应的角度Acos(1)0dAsin--dAtan--dCeiling向上取整Ceiling(1.5)2dCos--dExp相当于e的X次幂Exp(0)1dFloor向下取整Flo......
  • NCalc 学习笔记 (六)
    参数静态参数静态参数可以在表达式求值前定义。用方括号括起来表示为静态参数。可以通过Expression对象中名为 Parameters 的字典来访问静态参数。Expressione=newExpression("2*[x]^2+5*[y]");e.Parameters["x"]=5;e.Parameters["y"]=1;Console.Writ......
  • uniapp-黑马优选学习03
    01.uni数字组件:uni-number-box02.在flex布局中,如果子元素未铺满的处理>>情形:   >>处理方式:为相应的子元素,配置flex=103.商品信息的滑动删除>>组件:uni-swipe-action和 uni-swipe-action-item>>注意:options已经修改为:left-op......
  • Python学习笔记
    函数调试相关F8stepover单步执行会把函数调用视作一行,直接执行,不会进入函数内部F7stepinto也可以单步执行,如果是函数,会进入函数内部函数注释使用三对引号参数相关形参和实参:定义函数时使用的参数是形参,调用函数时传入的函数是实参局部变量和全局变量:局部变量是在函......
  • 《Linux命令行与shell脚本编程大全》研读笔记
    目录命令总结进程相关环境变量相关第六章Linux环境变量命令总结进程相关命令名称作用举例psProcessStatus,用来列出系统中当前运行的那些进程ps-ftop动态地显示进程信息top环境变量相关命令名称作用举例env列出全局环境变量env......
  • 黑马程序员Java教程学习笔记(一)
    文章目录黑马程序员Java学习笔记Java版本Java语言的跨平台原理JRE和JDKJDK的下载和安装HelloWorld案例注释关键字常量数据类型标识符类型转换运算符字符"+"操作字符串"+"操作赋值运算符自增自减运算符关系运算符逻辑运算符三元运算符案例:两只老虎案例:三个和尚数据输入案例:三个和尚......
  • 黑马程序员Java教程学习笔记(五)
    文章目录黑马程序员Java教程学习笔记(五)日期时间:Date、SimpleDateFormat、CalendarJDK8开始新增日期API包装类正则表达式Arrays类选择排序、二分查找Lambda表达式集合概述、Collection集合的体系特点Collection常用API、遍历方式、存储自定义类型对象常见数据结构List系列集合、集......