项目中碰到这么个问题,给出一段expression,得出结果,类似于javascript中的eval。同事采用这种方法解决了,觉得挺巧妙,特贴于此。
主要是利用了ADO.NET中DataTable兼容SQL算式的特性,目前得出结论,只要是SQL中能够支持的简单算式,这里都可以通过该种方式获取其值。
using System;
using System.Collections;
public class MyClass
{
public static void Main()
{
try
{
double dblResult = Convert.ToDouble(MyClass.Eval(@"1+2*3+120%50/4"));
Console.Write(dblResult);
Console.ReadLine();
}
catch(System.Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
public static object Eval(string expression)
{
System.Data.DataTable table=new System.Data.DataTable();
System.Data.DataColumn Col=new System.Data.DataColumn("col1",typeof(string),expression);
table.Columns.Add(Col);
table.Rows.Add(new object[] {""});
return table.Rows[0][0];
}
}