• 利用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); 
                       }
                   }";
        }
    }
  • 相关阅读:
    Linux运维工程师需要掌握什么才能胜任工作呢
    我眼中的Linux系统和红帽RHCE认证
    Linux系统从零到高手的进阶心得
    我在大学毕业后学习Linux系统的心得经验
    装RAC跑脚本报错
    Oracle rac11g 安装报INS41112
    Oracle升级11.2.0.3-11.2.0.4(Windows)
    防存储掉线安装监控软件
    跨平台迁移数据库windows-Linux
    linux crontab -e生成日期格式
  • 原文地址:https://www.cnblogs.com/linybo/p/13361734.html
Copyright © 2020-2023  润新知