How can I evaluate a C# expression dynamically?

后端 未结 7 1351
情话喂你
情话喂你 2020-11-22 07:22

I would like to do the equivalent of:

object result = Eval(\"1 + 3\");
string now    = Eval(\"System.DateTime.Now().ToString()\") as string

7条回答
  •  天涯浪人
    2020-11-22 08:11

    using System;
    using Microsoft.JScript;
    using Microsoft.JScript.Vsa;
    using Convert = Microsoft.JScript.Convert;
    
    namespace System
    {
        public class MathEvaluator : INeedEngine
        {
            private VsaEngine vsaEngine;
    
            public virtual String Evaluate(string expr)
            {
                var engine = (INeedEngine)this;
                var result = Eval.JScriptEvaluate(expr, engine.GetEngine());
    
                return Convert.ToString(result, true);
            }
    
            VsaEngine INeedEngine.GetEngine()
            {
                vsaEngine = vsaEngine ?? VsaEngine.CreateEngineWithType(this.GetType().TypeHandle);
                return vsaEngine;
            }
    
            void INeedEngine.SetEngine(VsaEngine engine)
            {
                vsaEngine = engine;
            }
        }
    }
    

提交回复
热议问题