此类是一个计算表达式的类,输入一个表达式,调用后会计算出表达式的值。
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Text;
using Microsoft.CSharp;

namespace CSharp
{
 
/// <summary>
 
/// 模块名称:计算表达式的类
 
/// </summary>

 public class Calculate
 
{
  
/// <summary>
  
/// 构造函数
  
/// </summary>

  public Calculate()
  
{

  }


  
public static object Calc(string expression) 
  

   
string className = "Calc"
   
string methodName = "Run"
   expression
=expression.Replace("/","*1.0/");
             
   
// 创建编译器实例。 
   ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler()); 
   
// 设置编译参数。 
   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;
  }

 }

}

引用至http://snowdust.cnblogs.com/articles/311728.html
posted on 2006-06-02 10:25  冰羽  阅读(229)  评论(1)    收藏  举报