最近用到了这个功能,要计算一些字符串表达式,如"1 + 3 / 2"等等,就写了这个类。原理很简单,就是用CodeDom动态生成一个包含自定义函数的程序集,再通过反射调用。网上例子极多。我这个类是拿来就可以用的,只需要Copy一下代码就可以直接用,不用读代码。支持常用数学函数,如Sin,Log等,而且不区分大小写。
------------------------------------------------------------------------------------
其实大家可以使用ADO.NET中的DataTable来实现,加入一个DataColumn然后把Expression属性赋值成这个表达式,之后一个筛选返回数据就可以了,简单方便,也比这个快多了
--------------------------------------------------------------------------------------
我用sql实现过这个功能

当时找不到别的办法了,自己写逆根遍历太麻烦了,就想了这个歪点子
歪点子可以更简单点,嘿嘿
select (1+3/2) as Exp1
----------------------------------------------------------------------------------------
还有更好的方法





只需要添加Microsoft.JScript和Microsoft.Vsa两个引用就OK,超简洁....呵呵
------------------------------------------------------------------------------------------
这样做不错,但是搂住没有考虑到一个问题,每做一次计算,就会编译出来一个Assembly,并装载在当前的AppDomain,这样随着程序的不断计算,越来越多地Assembly被装载在当前AppDomain,一个Assembly一旦被装载,除非所在的AppDomain被卸载,否则。net是不能单独卸载某个Assembly,这样使用的内存会越来越多,又不能被垃圾回收
-----------------------------------------------------------------------------------------
最简单的方法:



-----------------------------------------------------------------------------------------