using System;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Web.UI;
using Microsoft.JScript; namespace HuaTong.General.Utility
{
/// <summary>
/// JScriptProvider包装
/// </summary>
public static class JScript
{
private static object js = null;
private static Type jsType = null;
private static readonly string jsSource =
@"package JScript
{
class JScript
{
public function Eval(expr : String) : Object
{
return eval(expr);
}
}
}";
/// <summary>
/// 构造javascript运行时对象
/// </summary>
static JScript()
{
JScriptCodeProvider compiler = new JScriptCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results = compiler.CompileAssemblyFromSource(parameters, jsSource); Assembly assembly = results.CompiledAssembly;
jsType = assembly.GetType("JScript.JScript"); js = Activator.CreateInstance(jsType);
}
/// <summary>
/// 获取表达式的值
/// </summary>
/// <returns></returns>
public static int EvalToInt32(string code)
{
string s = EvalToString(code);
return int.Parse(s);
}
/// <summary>
/// 获取表达式的值
/// </summary>
/// <returns></returns>
public static double EvalToDouble(string code)
{
string s = EvalToString(code);
return double.Parse(s);
}
/// <summary>
/// 获取表达式的值
/// </summary>
/// <returns></returns>
public static string EvalToString(string code)
{
object o = EvalToObject(code);
return o.ToString();
}
/// <summary>
/// 获取表达式的值
/// </summary>
/// <returns></returns>
public static object EvalToObject(string code)
{
return jsType.InvokeMember("Eval", BindingFlags.InvokeMethod, null, js,
new object[] { code });
}
}
}

c# JScriptProvider包装的更多相关文章

  1. 【Java心得总结一】Java基本类型和包装类型解析

    说到数据类型这个问题是一个基本的不能再基本的问题,我们当初编程入门第一课一般就是讲数据类型,而今天我想记录的是一个在Java中容易忽略的问题,即基本类型和包装类型. 一.基本类型出现的原因 我们都知道 ...

  2. 5.6 JS中基本包装类型

    为了便于操作基本类型值,ES还提供了三种特殊的引用类型,即(基本包装类型):Number,String,Boolean.这三种类型与前面介绍的引用类型相似,但同时也拥有基本数据类型的一些特性. 平时经 ...

  3. javaScript对象-基本包装类型的详解

    本人按书上的内容大致地把javaScript对象划分成“引用类型”.“基本包装类型”和“内置对象”三块内容. 我们这篇先了解下基本包装类型的详细用法吧! 一.我们先解下相关概念: 1.引用类型的值(对 ...

  4. ongl(原始类型和包装类型)

    原始类型和包装类型 //首先创建两个实体类 user 和 address user中包含address package cn.jbit.bean; public class User { //用户类 ...

  5. 从零开始学习jQuery (三) 管理jQuery包装集

    本系列文章导航 从零开始学习jQuery (三) 管理jQuery包装集 一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着 ...

  6. jQuery包装集

    jQuery包装集指的是通过$()方法返回的一个元素集,这跟一般的javascript数组有所区别, 包装集在后者的基础上还有一些初始化的函数和属性. 我们可以对二者进行一个比较: jsdiv = d ...

  7. java基础类型、包装器

    char a = 'h';  //类包装器 Character aobj = a ;//自动装箱 byte b = 6; Byte bobj = b; short s = 234; Short sob ...

  8. 如何把 Callback 接口包装成 Promise 接口

    最近一段时间一直在看Node.js,在开发过程中经常要调用一些异步接口,通常在接口的最后一个参数会传入一个回调函数,可以用来处理异常,非异常情况.大致模式如下: var fs = require(“f ...

  9. HttpContext的dynamic包装器DynamicHttpContext (附原代码)

    项目背景:在.net framework下使用asp.net webform,特别是aspx+ajax+ashx中,ashx后台代码获取传入参数的时候,需要很多[“…”],我用dynamic对他进行包 ...

随机推荐

  1. VMware 共享目录不显示的解决办法

    centos mount -t vmhgfs .host:/ /mnt/hgfs # 如果有如下提示: # Error: cannot mount filesystem: No such device ...

  2. Idea 切换git账号

    重置一下账号设置,再次执行拉取或推送会提示重新输入账号密码 进入项目根目录执行:git config --system --unset credential.helper

  3. 爬虫之xpath

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  4. windows下Redis主从复制配置(报错:Invalid argument during startup: unknown conf file parameter : slaveof)

    主从复制配置中的遇到的异常: Invalid argument during startup: unknown conf file parameter :  slaveof 把Redis文件夹复制两份 ...

  5. SSM框架下分页的实现(封装page.java和List<?>)

    之前写过一篇博客  java分页的实现(后台工具类和前台jsp页面),介绍了分页的原理. 今天整合了Spring和SpringMVC和MyBatis,做了增删改查和分页,之前的逻辑都写在了Servle ...

  6. 简单描述DataAdapter、DataReader、DataSet、Datatable对比

    一.存储的对比 DataReader 从数据库中检索[只读]数据流,存在客户端网络缓冲区,直到Read方法访问它们. DataAdapter 表示一组SQL命令和数据库连接,用于填充DateSet和[ ...

  7. Dokcer ELK

    使用 docker 搭建 ELK  非常简单 docker run --name myes -d -p 9200:9200 -p 9300:9300 elasticsearch:2.4.4   运行  ...

  8. POJ 2299 Ultra-QuickSort(树状数组+离散化)

    http://poj.org/problem?id=2299 题意:给出一组数,求逆序对. 思路: 这道题可以用树状数组解决,但是在此之前,需要对数据进行一下预处理. 这道题目的数据可以大到999,9 ...

  9. linux pgrep命令的使用

    pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行. 常用参数 -l 列出程序名和进程ID -o 进程起始的ID -n 进程终止的ID $ ps -ef | grep mys ...

  10. offset的坑 使用前要将对象先show

    使用jquery $('#obj').offset( {top:300, left: 600}); 如果设置offset之前是隐藏的,那么你设置新的offset之后就不会是指定的位置,而且会越飞越远, ...