zoukankan      html  css  js  c++  java
  • C# Eval

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.CodeDom.Compiler;
    using System.Reflection;

    namespace Eval_Demo
    {
        
    /// <summary>
        
    /// 动态求值
        
    /// </summary>
        public class Evaluator
        {
            
    /// <summary>
            
    /// 计算结果,如果表达式出错则抛出异常
            
    /// </summary>
            
    /// <param name="statement">表达式,如"1+2+3+4"</param>
            
    /// <returns>结果</returns>
            public static object Eval(string statement)
            {
                
    return _evaluatorType.InvokeMember(
                            
    "Eval",
                            BindingFlags.InvokeMethod,
                            
    null,
                            _evaluator,
                            
    new object[] { statement }
                         );
            }

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

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


    class Program
        {
            
    static void Main(string[] args)
            {
                Console.WriteLine(Evaluator.Eval(
    "1+2+3+4+5+6+7+8+9"));//45
                Console.WriteLine(Evaluator.Eval("((10-2)/2+1)*3"));//15
            }
        }
  • 相关阅读:
    HDU 5828 Rikka with Sequence (线段树+剪枝优化)
    Educational Codeforces Round 5 E. Sum of Remainders (思维题)
    HDU 2256 Problem of Precision (矩阵快速幂)
    Codeforces 597C. Subsequences (树状数组+dp)
    Codeforces Round #292 (Div. 1) B. Drazil and Tiles (类似拓扑)
    HDU 5794 A Simple Chess (Lucas + dp)
    Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)
    Codeforces Round #313 (Div. 2) E. Gerald and Giant Chess (Lucas + dp)
    进程内存空间的分布
    快排,堆排与归并排序
  • 原文地址:https://www.cnblogs.com/RobotTech/p/1055686.html
Copyright © 2011-2022 走看看