天天看点

C# 动态解析表达式需求解决方案使用示例参考

我们很难捉摸用户的思维,即使使用非常正式的文档规范某些数据的定义、结果的标准等,也不能抵挡住用户不断变化的需求,但他们有个万变不离的东西——你做这个东西要是万能的,即输入参数类型、个数等发生改变,也得生成出正确的结果。

在编程计算中,很多时候涉及一些公式,用户要求不但能够调整系数、还要能够调整理公式的结构。例如,将2+3-5调整理成2+3*5。我之前使用的解决方案是写一个类,换公式了,就继承它,写一个子类,代码中用反射去调用这个子类,可以解决问题。但是有些麻烦。

现决定,用动态来解析公式的方法来解决这个问题。由于时间比较紧张,找到了一个开源的类库ExpressionEvaluator,没有深入研究,不过已经解决了我们的问题。

1.在官网下载ExpressionEvaluator. dll(2.0.4版),在网上搜索antlr3.runtime.dll(3.5.0.2版)

2.项目中引用这两个dll;

3.第一种情况,不需要变量,直接是常规的数字、符号、系统函数(Math类)的组合。

  

调用:

结果如下:

C# 动态解析表达式需求解决方案使用示例参考

4.第二种情况,其中包含了一些变量(这种情况更多),需要将自己的变量写成一个类,然后注册这个类。

方法:

结果:

C# 动态解析表达式需求解决方案使用示例参考

当然,还有其他内容需要研究、学习!

Github地址:

<a href="https://github.com/RupertAvery/csharpeval">https://github.com/RupertAvery/csharpeval</a>

调用系统的Math函数:

<a href="http://csharpeval.codeplex.com/discussions/585878">http://csharpeval.codeplex.com/discussions/585878</a>