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(nullnew object[0]);
63        }

64    }

65}
posted on 2007-04-06 17:10  Caviare  阅读(381)  评论(0编辑  收藏  举报