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); 
                  }
               }
            }";
    }
}


 

使用CODEDOM动态实现代码的生成,编译

      前一阶段一直在做一个基于VS.NET2k3的一个插件,大致功能是实现业务代码的自动生成。从二个多月前我就开始了,可是一直没有空闲的时间,再加入在实际开发过程中遇到一些关于VS插件方面的问题...
  • greystar
  • greystar
  • 2004年12月03日 16:51
  • 3839

CodeDomProvider 反射机制生成计算函数

using System; using System.Text; //编译器 using System.CodeDom.Compiler; //反射 using System.Reflect...
  • liguo9860
  • liguo9860
  • 2011年01月20日 09:11
  • 547

使用JScript函数

使用JScript函数 虽然JScript是一种面向对象语言,但它也包含少部分函数,通常有三个函数是很有用的,你可以使用parseInt()和parseFloat()函数来将一个字符串转变为整数...
  • aasmfox
  • aasmfox
  • 2013年12月18日 21:59
  • 609

C#高级应用之CodeDomProvider引擎篇

//编译引擎设计部分using System;using System.Text;using System.CodeDom.Compiler;using System.Reflection;using...
  • sharpnessdotnet
  • sharpnessdotnet
  • 2007年12月06日 17:23
  • 5147

服务端 jscript 生成随机数图片验证码 by shawl.qiu

服务端 jscript 生成随机数图片验证码 by shawl.qiu 说明: 其实这个程序只是从某人写的一个VBScript程序改写成 Jscript 而已, 可以说不是我写的, 只是改改而已......
  • btbtd
  • btbtd
  • 2007年01月04日 14:02
  • 1952

JScript---数据类型转换

//Number转换规则 0:false Number(""); //0 Number(" "); //0 Number(false); //0 Number(nu...
  • damys
  • damys
  • 2014年09月04日 17:02
  • 793

02 JScript 函数

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

JScript中的事件函数

  JScript/JavaScript的参考文档甚少,也不是很详细,很多语法也是一知半解,今天在写事件函数时碰到了一个问题,现讨论如下。  众所周知,在处理HTML元素的事件时可以有多种方法写代码:...
  • lilei_jn
  • lilei_jn
  • 2005年09月20日 16:13
  • 1198

C#高级应用之CodeDomProvider类

C#高级应用之CodeDomProvider类
  • jingcairensheng
  • jingcairensheng
  • 2017年08月24日 16:43
  • 61

js 属性与函数 Microsoft JScript 运行时错误: 缺少函数

points=[]; //points.length()//Microsoft JScript 运行时错误: 缺少函数 points.length //ok ,length是属性 报错的位置在附...
  • ilvu999
  • ilvu999
  • 2011年12月13日 09:00
  • 1650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeDomProvider JScript生成计算函数
举报原因:
原因补充:

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