- 1using System;
- 2using System.Data;
- 3using System.Configuration;
- 4using System.Collections;
- 5using System.Web;
- 6using System.Web.Security;
- 7using System.Web.UI;
- 8using System.Web.UI.WebControls;
- 9using System.Web.UI.WebControls.WebParts;
- 10using System.Web.UI.HtmlControls;
- 11using System.Text;
- 12using System.CodeDom.Compiler;
- 13using Microsoft.CSharp;
- 14using System.Reflection;
- 15
- 16public partial class Default2 : System.Web.UI.Page
- 17{
- 18 protected void Page_Load(object sender, EventArgs e)
- 19 {
- 20 TimeSpan Ts = new TimeSpan();
- 21 DateTime dtStar = DateTime.Now;
- 22 Evaluator ev = new Evaluator();
- 23 Response.Write(ev.Eval("2*2*3*10*3.12/811"));
- 24 DateTime dtEnd = DateTime.Now;
- 25 Ts = dtEnd - dtStar;
- 26 Response.Write("<br>" + Ts.TotalMilliseconds.ToString());
- 27 }
- 28}
- 29public class Evaluator
- 30{
- 31 private static CodeDomProvider comp = new CSharpCodeProvider();
- 32 private static CompilerParameters cp = new CompilerParameters();
- 33 private static MethodInfo mi;
- 34 public object Eval(string expression)
- 35 {
- 36 StringBuilder codeBuilder = new StringBuilder();
- 37 codeBuilder.Append("using System;");
- 38 codeBuilder.Append("using Microsoft.CSharp;");
- 39 codeBuilder.Append("");
- 40 codeBuilder.Append("public class Mode");
- 41 codeBuilder.Append("{ ");
- 42 codeBuilder.Append(" public static object Func()");
- 43 codeBuilder.Append("{");
- 44 codeBuilder.Append(" return " + expression + ";");
- 45 codeBuilder.Append(" }");
- 46 codeBuilder.Append(" }");
- 47 cp.ReferencedAssemblies.Add("System.dll");
- 48 cp.GenerateExecutable = false;
- 49 cp.GenerateInMemory = true;
- 50 string code = codeBuilder.ToString();
- 51 string[] stra = new string[] { code };
- 52 CompilerResults cr = comp.CreateCompiler().CompileAssemblyFromSource(cp, code);
- 53 if (cr.Errors.HasErrors)
- 54 {
- 55 return null;
- 56 }
- 57 else
- 58 {
- 59 Assembly a = cr.CompiledAssembly;
- 60 Type t = a.GetType("Mode");
- 61 mi = t.GetMethod("Func", BindingFlags.Static | BindingFlags.Public);
- 62 return mi.Invoke(null, new object[0]);
- 63 }
- 64 }
- 65}
反射应用-编译字符串获取计算结果
最新推荐文章于 2023-05-23 19:00:00 发布