CodeDomProvider JScript生成计算函数

原创 2011年01月20日 09:28:00
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.JScript;

namespace TestRunSpeed
{
    public class JSEvaluator
    {
        /// <summary>
        /// 返回Integer类型
        /// </summary>
        /// <param name="statement"></param>
        /// <returns></returns>
        public static int EvalToInteger(string statement)
        {
            string s = EvalToString(statement);
            return int.Parse(s.ToString());
        }
        /// <summary>
        /// 返回Double类型
        /// </summary>
        /// <param name="statement"></param>
        /// <returns></returns>
        public static double EvalToDouble(string statement)
        {
            string s = EvalToString(statement);
            double result;
            bool a = double.TryParse(s, out result);
            if (a) return result;
            else return -99.0;
        }
        /// <summary>
        /// 返回String类型
        /// </summary>
        /// <param name="statement"></param>
        /// <returns></returns>
        public static string EvalToString(string statement)
        {
            object o = EvalToObject(statement);
            return o.ToString();
        }
        /// <summary>
        /// 返回Object类型
        /// </summary>
        /// <param name="statement"></param>
        /// <returns></returns>
        public static object EvalToObject(string statement)
        {
            try
            {
                //根据类型调用指定的方法。绑定约束并匹配指定参数列表
                return _evaluatorType.InvokeMember(
                            "Eval",
                            BindingFlags.InvokeMethod,
                            null,
                            _evaluator,
                            new object[] { statement }
                         );
            }
            catch
            {
                return "null";
            }
        }

        static JSEvaluator()
        {
            //创建编译器
            CodeDomProvider compiler = CodeDomProvider.CreateProvider("JScript");
            //创建引用参数
            CompilerParameters parameters = new CompilerParameters();
            //在内存中生成输出
            parameters.GenerateInMemory = true;
            //返回编译结果
            CompilerResults 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;
        //JScript代码
        private static readonly string _jscriptSource =

            @"package Evaluator
            {
               class Evaluator
               {
                  public function Eval(expr : String) : String 
                  { 
                     return eval(expr); 
                  }
               }
            }";
    }
}


 

相关文章推荐

CodeDomProvider 反射机制生成计算函数

using System; using System.Text; //编译器 using System.CodeDom.Compiler; //反射 using System.Reflect...

02 JScript 函数

JScript 函数 Microsoft Jscript 函数执行操作,也可以返回值。某些时候是计算或比较的结果。函数又被称为“全局方法”。 一个函数中包含有几个操作。这样可使得代码更合理化。可以...

VS2010 更新 JScript IntelliSense 时出错 提示虚拟内存级别低导致vs关闭

如果软件安装正常的话,我估计是因为VS2010在更新一个JScript IntelliSense 工具时老是出错,造成了VS2010老是宕机。解决的方法就是手动下载安装这个JScript Intell...
  • scq503
  • scq503
  • 2015年01月28日 10:24
  • 1111

JScript使用正则表达式的经验

作者:朱金灿来源:http://blog.csdn.net/clever101在JScript使用正则表达式时有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符,必须首先将这些字符...

NScript - A script host for C#/VB.NET/JScript.NET(NScript-.Net语言的脚步解释主机)

原文链接: http://www.codeproject.com/Articles/3207/NScript-A-script-host-for-C-VB-NET-JScript-NET 安装包和...

Jscript file operate

在使用自动化测试工具的时候大家可能都有这样的感受:工具的操作都比较简单,复杂是编制测试脚本。当然,要真正掌握自动化测试的核心那么我们必须精通至少一种脚本语言。TestComplete支持VBScrip...

JS:《Microsoft JScript 运行时错误: 缺少 '}'》解决方案

今天遇到这样一个问题,“Microsoft JScript 运行时错误: 缺少 '}'”,在之前使用DataTable转换成Json数据,并解析Json数据过程中从未出现过此问题,经过测试发现从数据库...

测试JScript/VBScript的办法

可单步运行:  cscript //X test.vbs  (如果安装VC环境会直接提示进入VC编译器调试) 遇到Stop(vbs)或者是Debug指令方中断至调试器:  cscript //D...
  • xhhjin
  • xhhjin
  • 2012年11月19日 12:31
  • 1217

asp.net中常用javascript脚本输出的辅助类JScript

/// /// 类 说 明: Javascript封装类 /// public class JScript { /// /// 调...
  • ful1021
  • ful1021
  • 2013年09月03日 16:57
  • 798
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeDomProvider JScript生成计算函数
举报原因:
原因补充:

(最多只允许输入30个字)