NetCore中使用DynamicExpresso、Z.Expressions、LambdaParser進行安字符串求值


例子如下:

Z.Expressions從2.0開始支持了NetCore,但是收費的。其它兩者免費。建議使用DynamicExpresso,免費而且速度快。LambdaParser目前支持太少。

static void Main(string[] args)
        {

            Console.OutputEncoding = Encoding.Unicode;

            System.Diagnostics.Stopwatch sp = new Stopwatch();
            sp.Start();
            var code = "i<100&&s.Contains(\"測試\")";
            var interpreter = new DynamicExpresso.Interpreter();
            var result = interpreter.ParseAsDelegate<Func<int, string, bool>>(code, "i", "s");
            //var result = interpreter.ParseAsExpression<Func<int, string, bool>>(code, "i", "s").Compile();
            for (int i = 0; i < 18000000; i++)
            {
                var v = result(i, "我在測試" + i);//2213ms
                //Console.WriteLine(v);
            }
            sp.Stop();
            Console.WriteLine("time:" + sp.ElapsedMilliseconds + "ms");

            //System.Diagnostics.Stopwatch sp = new Stopwatch();
            //sp.Start();
            ////var code = @"
            ////     var list = new List<int>() { 1, 2, 3, 4, x };
            ////        var filter = list.Where(x => x < 4);
            ////        return filter.Sum(x => x); ";
            //var code = "i<100&&s.Contains(\"測試\")";
            ////var result = Z.Expressions.Eval.Compile<Func<int, string, bool>>(code, "i", "s");

            //for (int i = 0; i < 100000; i++)
            //{
            //    var v = result(i, "我愛測試");
            //    //Console.WriteLine(v);
            //}
            //sp.Stop();
            //Console.WriteLine("time:" + sp.ElapsedMilliseconds + "ms");

            //var parse = new LambdaParser();
            //while (true)
            //{
            //    try
            //    {
            //        Console.WriteLine(new string('_', 20));
            //        var dics = new Dictionary<string, object>();
            //        dics.Add("x1", 32.0);
            //        dics.Add("x2", 23.0);
            //        dics.Add("x3", 34.5);
            //        dics.Add("x4", 34.5);
            //        dics.Add("s1", "my name is xxxxzhu!");
            //        dics.Add("b1", true);
            //        foreach (var item in dics)
            //        {
            //            Console.WriteLine(item.Key + "\t" + item.Value);
            //        }
            //        Console.WriteLine(new string('_', 20));
            //        Console.WriteLine("expr:");
            //        var expr = Console.ReadLine();
            //        var value = parse.Eval(expr, dics);
            //        Console.WriteLine("value======================" + value);
            //    }
            //    catch (Exception ex) { Console.WriteLine("error====================:" + ex.Message); }
            //}
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM