新建一个类:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Text;
using Microsoft.CSharp;   


namespace YYC.BLL
{
    
///   <summary>   
    
///   计算表达式的类   
    
///   </summary>   

    public class CalculateExpression
    
{
        
///   <summary>   
        
///   接受一个string类型的表达式并计算结果,返回一个object对象,静态方法   
        
///   </summary>   
        
///   <param   name="expression"></param>   
        
///   <returns></returns>   

        public static object Calculate(string expression)
        
{
            
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;
        }

    }

}
//   调用:
    protected void Page_Load(object sender, EventArgs e)
    {  
        //string str = "(a+b)/c-d";  进行参数的转化
        string a = "2", b = "3", c = "4", d = "1";
        string str = "("+a.ToString()+"+"+b.ToString()+")"+"/"+c.ToString()+"-"+d.ToString();
        // string str = "(2+12)/4-1";   实际参数
      
        this.Response.Write("<script>alert('" + str + "');</script>");
        double result;
        result = (double)YYC.BLL.CalculateExpression.Calculate(str);
        this.Response.Write("<script>alert('" + result + "');</script>");
    }
posted on 2006-12-10 00:48  ipusr  阅读(205)  评论(0)    收藏  举报