雪尘

我躲在/濒临深秋的树下/享受孤独/我听着/紫罗兰色的琴声/迎接黎明

博客园 首页 新随笔 联系 订阅 管理

 此类是一个计算表达式的类,输入一个表达式,调用后会计算出表达式的值。

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;
  }

 }

}
posted on 2006-01-05 17:30  雪尘的博客  阅读(343)  评论(0编辑  收藏  举报