当前位置: 首页 > news >正文

c#中实现类似js的Eval方法

using System;
using System.Collections;
using System.ComponentModel;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.JScript;
using System.Reflection;
//创建实现js中eval方法的类
public class EvalMethod
{
      //初始化加载程序的字符串;
      public static readonly String _jsClass = @"class theEval{ public function Eval(str:String):String {return eval(str)}}";
      //定义对象
      public static object _evalObject=null;
      public static Type _evalType =null;

      //构造函数
      static EvalMethod()
      {
            CodeDomProvider _provider = new JScriptCodeProvider();
            ICodeCompiler _iCode = _provider.CreateCompiler();
            CompilerParameters _parameter = new CompilerParameters();
            _parameters.GenerateInMemory = true;
            CompilerResult _result;
            _result = _iCode.CompilerAssemblyFromSource(_parameter,_jsClass);

            Assembly _assembly = _result.CompilerAssembly;
            _evalType = _assembly.GetType("theEval");
            _evalObject = Activator.CreateInstance(_evalType );
      }

public static object Eval(string str)
{
          return evalType .InvokeMember("Eval",BindingFlags.InvokeMethod,null,_evalobject,new object[]{str});
}
}

调用:
object _return = EvalMethod.Eval("2*4+14+2-4");

这样得到的效果基本上和js中的eval一样;

转载于:https://www.cnblogs.com/zyzhang/archive/2008/06/30/1232335.html

相关文章:

  • SNMP的应用
  • [转 ] SAP Trouble Shooting Questionnaire SAP 常见问题
  • Hibernate 3 标识符生成策略
  • “大”服务的成功来自“小”细节
  • 酷博短信发送软件
  • [导入]千万千万不要买宏图三胞的东西
  • 基于Win32的多线程客户/服务器通信
  • 转:在自己的工具条中使用ArcGIS Engine提供的命令和工具
  • 费劲千辛万苦终于找到了数据库!
  • 忽然之间
  • 在VS2008中使用WSE 3.0
  • ASP.NET中值类型与列类型不匹配的问题
  • 【PHP】日文全角转半角半角判断
  • 硬盘知识
  • 医药公司网站建设方案
  • 0x05 Python数据分析,Anaconda八斩刀
  • JAVA多线程机制解析-volatilesynchronized
  • linux安装openssl、swoole等扩展的具体步骤
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Vue实战(四)登录/注册页的实现
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 前端路由实现-history
  • 前嗅ForeSpider教程:创建模板
  • 深入 Nginx 之配置篇
  • 终端用户监控:真实用户监控还是模拟监控?
  • 最简单的无缝轮播
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 仓管云——企业云erp功能有哪些?
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #NOIP 2014# day.1 T2 联合权值
  • #QT(智能家居界面-界面切换)
  • (39)STM32——FLASH闪存
  • (C#)一个最简单的链表类
  • (k8s中)docker netty OOM问题记录
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (动态规划)5. 最长回文子串 java解决
  • (多级缓存)缓存同步
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (十)T检验-第一部分
  • (十六)Flask之蓝图
  • .NET 使用 XPath 来读写 XML 文件
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET处理HTTP请求
  • .Net下的签名与混淆
  • @AutoConfigurationPackage的使用
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [BZOJ 1040] 骑士
  • [cogs2652]秘术「天文密葬法」
  • [CSS3备忘] transform animation 等
  • [DAX] MAX函数 | MAXX函数
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [HackMyVM]靶场 Quick3
  • [HeMIM]Cl,[AeMIM]Br,[CeEIM]Cl,([HO-PECH-MIM]Cl,[HOOC-PECH-MIM]Cl改性酚醛树脂