string 转换成计算公式

View Code
 1         /// <summary>
 2         /// string 转换成计算公式
 3         /// </summary>
 4         /// <param name="expression"></param>
 5         /// <returns></returns>
 6         public static object Calc(string expression)
 7         {
 8             string className = "CalcQ";
 9             string methodName = "RunW";
10             expression = expression.Replace("/ ", "*1.0/ ");
11 
12             //创建编译器实例。     
13             ICodeCompiler complier = new CSharpCodeProvider().CreateCompiler();
14             //设置编译参数。     
15             CompilerParameters paras = new CompilerParameters();
16             paras.GenerateExecutable = false;
17             paras.GenerateInMemory = true;
18 
19             //创建动态代码。     
20             StringBuilder classSource = new StringBuilder();
21             classSource.Append("public     class     " + className + "\n ");
22             classSource.Append("{\n ");
23             classSource.Append("                 public     object     " + methodName + "()\n ");
24             classSource.Append("                 {\n ");
25             classSource.Append("                                 return     " + expression + ";\n ");
26             classSource.Append("                 }\n ");
27             classSource.Append("} ");
28 
29             //System.Diagnostics.Debug.WriteLine(classSource.ToString());     
30 
31             //编译代码。     
32             CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());
33 
34             //获取编译后的程序集。     
35             Assembly assembly = result.CompiledAssembly;
36 
37             //动态调用方法。     
38             object eval = assembly.CreateInstance(className);
39             MethodInfo method = eval.GetType().GetMethod(methodName);
40             object reobj = method.Invoke(eval, null);
41             GC.Collect();
42             return reobj;
43         }

 

posted @ 2012-07-10 16:58  小风。  阅读(519)  评论(1编辑  收藏  举报