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. [转载]Javassist 使用指南(一)

    ======================= 本文转载自简书,感谢原作者!. 原链接如下:https://www.jianshu.com/p/43424242846b =============== ...

  2. SaltStack匹配target-第六篇

    练习内容 Salt远程执行中目标选择常用的模式 1.通配符匹配 2.正则表达式匹配 3.List支持 4.Grains匹配 5.IP地址匹配 6.混合匹配 7.Node groups 远程执行格式 t ...

  3. [转][修]C清空输入缓冲区

    为何要清空输入缓存区     读取时输入缓冲区中的内容会被scanf函数逐个取走,正常case下scanf()函数可以根据返回值判断成功取走的数目:但当发生读取异常之后,输入缓冲区中的内容并未被取走, ...

  4. hdfs的FileSystem实例化

    前言 在spark中通过hdfs的java接口并发写文件出现了数据丢失的问题,一顿操作后发现原来是FileSystem的缓存机制.补一课先 FileSystem实例化 FileSystem.get(c ...

  5. Nordic nRF5 SDK和softdevice介绍

    SDK和Softdevice的区别是什么?怎么选择SDK和softdevice版本?芯片,SDK和softdevice有没有版本兼容问题?怎么理解SDK目录结构?SDK帮助文档在哪里?Softdevi ...

  6. 设计模式--命令模式C++实现

    命令模式C++实现 1定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求队列或者记录请求日志,可以提供命令的撤销和恢复功能 2类图 角色描述: Receiver接受者角色,就 ...

  7. Java MongoDB插入

    前言 插入是向MongoDB中添加数据的基本方法.对目标集使用insert方法来插入一条文档.这个方法会给文档增加一个”_id”属性(如果原来没有的话),然后保存到数据库中. 1.连接数据库,拿到集合 ...

  8. 【Demo】CSS3 过渡

    CSS3 过渡transition 应用于宽度属性的过渡效果,时长为 2 秒: div { transition: width 2s; -webkit-transition: width 2s; /* ...

  9. Java提高篇之常量池

    一.相关概念 1. 什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. 2. Class文件中的 ...

  10. 创建mysql表

    CREATE TABLE `t_play_product` ( `product_id` ) NOT NULL AUTO_INCREMENT COMMENT '主键ID,自增', `product_n ...