NCalc 学习笔记 (二)

简介

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值