C# 计算字符串公式得出数值.(CalculateExpression)
作者:C/S框架网  发布日期:2011/05/09 12:30:33
C# 计算字符串公式得出数值.(CalculateExpression)


代码说明:计算字符串公式得出数值.如string s="2+2" 返回object o =4;

/// <summary>
/// 用于字符串公式得出数值如string s="2+2" 返回object o =4;
/// </summary>
public class CalculateExpression
{
   /// <summary>
   /// 接受一个string类型的表达式并计算结果,返回一个object对象,静态方法
   /// </summary>
   public static object Calculate(string expression)
   {
      try
      {
         string className = "Calc";
         string methodName = "Run";
         expression = expression.Replace("/", "*1.0/");
         
         // 创建编译器实例。
         CodeDomProvider complier = (new Microsoft.CSharp.CSharpCodeProvider());
         // 设置编译参数。
         CompilerParameters paras = new CompilerParameters();
         paras.GenerateExecutable = false;
         paras.GenerateInMemory = true;
         
         // 创建动态代码。
         StringBuilder classSource = new StringBuilder();
         classSource.Append("public class " + className + "\n");
         classSource.Append("{\n");
         classSource.Append(" public object " + methodName + "()\n");
         classSource.Append(" {\n");
         classSource.Append(" return " + expression + ";\n");
         classSource.Append(" }\n");
         classSource.Append("}");
         
         // 编译代码。
         CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());
         
         // 获取编译后的程序集。
         Assembly assembly = result.CompiledAssembly;
         
         // 动态调用方法。
         object eval = assembly.CreateInstance(className);
         MethodInfo method = eval.GetType().GetMethod(methodName);
         object reobj = method.Invoke(eval, null);
         GC.Collect();
         return reobj;
      }
      catch (Exception ex)
      {
         ex.Message.ToString();
         return null;
      }
   }
}
上一篇 下一篇