![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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 }