博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eval C#表达式计算
阅读量:5998 次
发布时间:2019-06-20

本文共 1448 字,大约阅读时间需要 4 分钟。

Console.WriteLine(Evaluator.Eval("1+2+3+4+5+6+7+8+9"));//45
Console.WriteLine(Evaluator.Eval("(1+1)/2*3"));
Console.WriteLine(Evaluator.Eval("((10-2)/2+1)*3"));//15

 

using
 System;
using
 System.Collections.Generic;
using
 System.Linq;
using
 System.Text;
using
 System.CodeDom.Compiler;
using
 System.Reflection;
namespace
 Eval_Demo
{
    
///
 
<summary>
    
///
 动态求值
    
///
 
</summary>
    
public
 
class
 Evaluator
    {
        
///
 
<summary>
        
///
 计算结果,如果表达式出错则抛出异常
        
///
 
</summary>
        
///
 
<param name="statement">
表达式,如"1+2+3+4"
</param>
        
///
 
<returns>
结果
</returns>
        
public
 
static
 
object
 Eval(
string
 statement)
        {
            
return
 _evaluatorType.InvokeMember(
                        
"
Eval
"
,
                        BindingFlags.InvokeMethod,
                        
null
,
                        _evaluator,
                        
new
 
object
[] { statement }
                     );
        }
        
static
 Evaluator()
        {
            
//
构造JScript的编译驱动代码
            CodeDomProvider provider 
=
 CodeDomProvider.CreateProvider(
"
JScript
"
);
            CompilerParameters parameters;
            parameters 
=
 
new
 CompilerParameters();
            parameters.GenerateInMemory 
=
 
true
;
            CompilerResults results;
            results 
=
 provider.CompileAssemblyFromSource(parameters, _jscriptSource);
            Assembly assembly 
=
 results.CompiledAssembly;
            _evaluatorType 
=
 assembly.GetType(
"
Evaluator
"
);
            _evaluator 
=
 Activator.CreateInstance(_evaluatorType);
        }
        
private
 
static
 
object
 _evaluator 
=
 
null
;
        
private
 
static
 Type _evaluatorType 
=
 
null
;
        
///
 
<summary>
        
///
 JScript代码
        
///
 
</summary>
        
private
 
static
 
readonly
 
string
 _jscriptSource 
=
            
@"
class Evaluator
              {
                  public function Eval(expr : String) : String 
                  { 
                     return eval(expr); 
                  }
              }
"
;
    }

} 

转载地址:http://zxwmx.baihongyu.com/

你可能感兴趣的文章
android88 录音机
查看>>
Json,Gson,FastJson解析笔记
查看>>
python 文件中的中文编码解决方法
查看>>
How get a String Width in Libgdx?
查看>>
MySQL修改root密码的多种方法
查看>>
.NET Actor Model Implementations Differ in Approach
查看>>
Mac : 强大的截图
查看>>
【ALearning】第四章 Android Layout组件布局(一)
查看>>
一些很有用的网站链接
查看>>
hdu 5073 Galaxy(2014acm鞍山亚洲分部 C)
查看>>
[转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析
查看>>
新版SDK自己主动加入PlaceholderFragment的思考
查看>>
Oracle GoldenGate for Big Data 12.2.0.1的新特性
查看>>
投资方式集汇
查看>>
Android-Service组件
查看>>
[React Testing] className with Shallow Rendering
查看>>
ios碎片小记
查看>>
快排实现时候的一个逻辑错误
查看>>
分布式缓存系统 Memcached 基本配置与命令
查看>>
配置nginx好了,html能打开,index.php打不开?
查看>>