DotNet · 2022年4月22日

动态执行C#代码示例,如计算公式或其他C#代码

主要使用
类库 Microsoft.CSharp里的CSharpCodeProvider类

类库System.CodeDom.Compiler里的CompilerParameters类

  using   System;   
  using   System.CodeDom.Compiler;   
  using   System.Reflection;   
  using   System.Text;   
  using   Microsoft.CSharp;   
    
  namespace   Expression   
  {   
          ///   <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;   
                  }   
          }   
  }

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞