zoukankan      html  css  js  c++  java
  • 利用js的eval()构造C#的Evaluator

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.CodeDom.Compiler;
    using System.Reflection;
    
    namespace HS.Comm.Utility
    {
        /// <summary>
        /// JS动态语法解析
        /// </summary>
        public class Evaluator
        {
            /// <summary>
            /// 静态构造函数
            /// </summary>
            static Evaluator()
            {
                //构造JScript的编译驱动代码
                CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
    
                CompilerParameters parameters;
                parameters = new CompilerParameters();
                parameters.GenerateInMemory = true;
    
                CompilerResults results;
                results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
    
                Assembly assembly = results.CompiledAssembly;
                _evaluatorType = assembly.GetType("Evaluator");
    
                _evaluator = Activator.CreateInstance(_evaluatorType);
            }
    
            /// <summary>
            /// 计算结果,如果表达式出错则抛出异常
            /// </summary>
            /// <param name="statement">表达式,如"1+2+3+4"</param>
            /// <returns>结果</returns>
            public static object Eval(string statement)
            {
                try
                {
                    object obj = _evaluatorType.InvokeMember("Eval", BindingFlags.InvokeMethod, null, _evaluator, new object[] { statement });
                    return obj;
                }
                catch
                {
                    return string.Empty;
                }
            }
    
            private static object _evaluator = null;
            private static Type _evaluatorType = null;
            /// <summary>
            /// JScript代码
            /// </summary>
            private static readonly string _jscriptSource = @"class Evaluator
                   {
                       public function Eval(expr : String) : String 
                       { 
                          return eval(expr); 
                       }
                   }";
        }
    }
  • 相关阅读:
    课堂作业1(出题)
    微信小程序开发1
    asp.net实现通用水晶报表
    JS实现网络拓扑图
    注册与登录 接口与模板
    cookies and session
    Django路由及get请求post请求
    简析JavaScript事件冒泡机制
    屏蔽运营商流量球分析及解决方法
    使用github搭建个人主页
  • 原文地址:https://www.cnblogs.com/linybo/p/13361734.html
Copyright © 2011-2022 走看看