C#的四则运算函数

调用:Evaluator.EvalToDouble("(512+100)/300");  
   
  using   System;  
  using   System.CodeDom.Compiler;  
  using   System.Reflection;  
  using   Microsoft.JScript;  
   
  namespace   mysoft  
  {  
        public   class   Evaluator  
        {  
              public   static   int   EvalToInteger(string   statement)  
              {  
                    string   s   =   EvalToString(statement);  
                    return   int.Parse(s.ToString());  
              }  
   
              public   static   double   EvalToDouble(string   statement)  
              {  
                    string   s   =   EvalToString(statement);  
                    return   double.Parse(s);  
              }  
   
              public   static   string   EvalToString(string   statement)  
              {  
                    object   o   =   EvalToObject(statement);  
                    return   o.ToString();  
              }  
   
              public   static   object   EvalToObject(string   statement)  
              {  
                    return   _evaluatorType.InvokeMember(  
                                            "Eval",    
                                            BindingFlags.InvokeMethod,    
                                            null,    
                                            _evaluator,    
                                            new   object[]   {   statement   }    
                                      );  
              }  
                                 
              static   Evaluator()  
              {  
                    ICodeCompiler   compiler;  
                    compiler   =   new   JScriptCodeProvider().CreateCompiler();  
   
                    CompilerParameters   parameters;  
                    parameters   =   new   CompilerParameters();  
                    parameters.GenerateInMemory   =   true;  
                     
                    CompilerResults   results;  
                    results   =   compiler.CompileAssemblyFromSource(parameters,   _jscriptSource);  
   
                    Assembly   assembly   =   results.CompiledAssembly;  
                    _evaluatorType   =   assembly.GetType("Evaluator.Evaluator");  
                     
                    _evaluator   =   Activator.CreateInstance(_evaluatorType);  
              }  
               
              private   static   object   _evaluator   =   null;  
              private   static   Type   _evaluatorType   =   null;  
              private   static   readonly   string   _jscriptSource   =    
                     
                      @"package   Evaluator  
                          {  
                                class   Evaluator  
                                {  
                                      public   function   Eval(expr   :   String)   :   String    
                                      {    
                                            return   eval(expr);    
                                      }  
                                }  
                          }";  
        }  
  }  

转载于:https://www.cnblogs.com/qyz123/archive/2008/10/04/1303916.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值