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

NCalc 学习笔记 (六)

时间:2023-06-20 09:44:05浏览次数:46  
标签:NCalc Parameters 笔记 学习 参数 surface new Expression 表达式

参数

静态参数

静态参数可以在表达式求值前定义。用方括号括起来表示为静态参数。
可以通过 Expression 对象中名为 Parameters 的字典来访问静态参数。

Expression e = new Expression("2 * [x] ^ 2 + 5 * [y]");
e.Parameters["x"] = 5;
e.Parameters["y"] = 1;

Console.WriteLine(e.Evaluate());

参数十分有用,有些编译时不知道的值可以在运行时再进行赋值。或者在性能显得十分重要时,可以用参数来保存中间结果。

表达式参数

一个表达式可以由多个表达式通过表达式参数连接起来。简单来说就是把表达式当参数用。

Expression volume = new Expression("[surface] * h");
Expression surface = new Expression("[l] * [L]");
volume.Parameters["surface"] = surface;
surface.Parameters["l"] = 1;
surface.Parameters["L"] = 2;

动态参数

有的时候参数可能很复杂而需要用一个专用的方法来进行求值。我们可以使用 Expression 对象提供的 EvaluateParameter 事件。这样,当某个参数无法再字典中找到时,NCalc 就会尝试调用 EvaluateParameter 事件来解决这个问题。

方括号参数

用方括号括起来的参数可以支持 , .,并且支持数字开头的参数。

 Expression e = new Expression("[1My First Parameter] + [2My Second Parameter]");

多值参数

如果参数是 IEnumerable 类型,并且使用了 EvaluationOptions.IterateParameters 选项,那么求值结果是一个 IList 类型的对象。

Expression e = new Expression("(a * b) ^ c", EvaluateOptions.IterateParameters);
e.Parameters["a"] = new int[] { 1, 2, 3, 4, 5 };
e.Parameters["b"] = new int[] { 6, 7, 8, 9, 0 };
e.Parameters["c"] = 3;

foreach (var result in (IEnumerable)e.Evaluate())
{
    Console.WriteLine(result);
}

// 5
// 13
// 27
// 39
// 3

注: ^ 并不是幂乘符号,它代表的是异或。


参考链接

NCalc - Mathematical Expressions Evaluator for .NET

标签:NCalc,Parameters,笔记,学习,参数,surface,new,Expression,表达式
From: https://www.cnblogs.com/shijiehaiyang/p/17492802.html

相关文章

  • 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系列集合、集......
  • 6月19日学习总结
    今日主要学习了Java中的部分集合,如Arraylist,Collection,以及使用了集合的方法如add(),remove,get(),clear()等,同时了解了StringBuilder类(字符串缓冲区),此类能够高效处理字符串内存缓存问题,以及字符串转换方法toString()与字符串拼接或增加append()方法,也了解了迭代器Iterator,学会了......
  • 【学习笔记】万能欧几里得算法
    没空写了,回头补下。先放个板子。structNode{Nodeoperator*(Nodeb){//...}};Nodepow(Nodea,longlongb){Nodeans;while(b){if(b&1)ans=ans*a;a=a*a;b>>=1;}returnans;}Node......
  • 【技术学习】网络学习--使用select的IO多路复用的ftp服务器
    上一篇文章复习了一下最基础的服务器代码,这次再将代码改为io多路复用的方式。select函数是一种用于实现I/O多路复用的系统调用。它可以监视多个文件描述符,判断它们是否处于可读、可写或异常等事件状态,并在一个或多个文件描述符就绪时进行处理。这种方式避免了使用多线程或多进程......
  • 复习笔记
    第二章感知和认知基础1、人的感知交互通过什么?视觉,听觉,触觉感知 2、五觉视觉听觉触觉力觉感觉 3、认知过程感知识别注意记忆问题解决语言处理 4、RGB模型三原色红绿蓝 第三章交互设备1、输入设备有哪些?......
  • XSS-Lab闯关笔记
    XSS-Lablevel1level2level3level4level5level6level7level8level9level10level11level12level13level14level15level16level17level18level19level20level1从源码中可以看到这里并没有对输入的name参数进行任何过滤就直接放入了<h2></h2>标签内$str=$_GET["name"];echo"<h2......