當前位置: 妍妍網 > 碼農

C# 運算式動態解析神器:DynamicExpresso

2024-06-05碼農

前言

推薦一個強大動態運算式解析器,方便我們在計畫中,動態執行C#指令碼。

計畫簡介

DynamicExpresso內建了解析邏輯,它能夠將.NET的lambda運算式或委托轉化為C#語句,並在記憶體中的動態執行。

它不生成任何組譯,而是構建了一個運算式樹,在執行時執行。支持如加減乘除、比較、邏輯操作等基本運算子以及C#中的型別測試和轉換。

可以聲明和使用變量,包括自訂型別的例項;也可以設定參數,便於多次呼叫同一運算式時改變輸入值。

能夠直接從字串解析出.NET委托或Lambda運算式,方便整合到業務邏輯中。

套用場景

  • 指令碼化套用:建立一個環境讓使用者在執行時編寫和執行C#程式碼片段。

  • 條件執行:根據不同的條件動態生成執行程式碼。

  • 動態數據過濾:構建動態的LINQ查詢,用於資料庫或其他資料來源的過濾和檢索。

  • 自動化工具:在自動化流程中,根據使用者輸入或配置檔執行特定的程式碼操作。

  • 計畫優勢

  • 相容性:支持.NET Core 3.1及以上版本和.NET 4.6.2。

  • 效能:相比其他類似計畫,DynamicExpresso有較好的效能表現。

  • 易用性:單個dll檔,無額外依賴,易於部署。

  • 語法豐富性:支持C#的部份語法特性,如條件運算子、三元運算子、型別檢查等。

  • 簡單使用方法

    1、返回結果

    using DynamicExpresso;
    var target = new Interpreter();
    double result = target.Eval<double>("Math.Pow(x, y) + 5",
    new Parameter("x"typeof(double), 10),
    new Parameter("y"typeof(double), 2));
    //輸出105
    Console.WriteLine(result);

    2、定義變量

    using DynamicExpresso;
    //定義變量並賦值
    var target = new Interpreter().SetVariable("myVar"23);
    //輸出:33
    Console.WriteLine(target.Eval("myVar + 10"));

    3、參數

    using DynamicExpresso;
    var interpreter = new Interpreter();
    //動態參數
    var parameters = new[] {
    new Parameter("x"23),
    new Parameter("y"7)
    };
    //根據傳入參數,動態執行程式碼
    var result = interpreter.Eval("x + y", parameters);
    //輸出30
    Console.WriteLine(result);


    4、標識

    using DynamicExpresso;
    var target = new Interpreter();
    //定義2個標識
    target.SetVariable("this"new Customer { Name = "John" });
    target.SetVariable("that"new Customer { Name = "thatJohn" });
    //使用this標識
    Console.WriteLine(target.Eval("this.Name"));
    //this可隱式使用
    Console.WriteLine(target.Eval("Name"));
    //使用that標識
    Console.WriteLine(target.Eval("that.Name"));
    classCustomer { publicstring Name { getset; } }



    計畫地址

    https://github.com/dynamicexpresso/DynamicExpresso

    - EOF -

    推薦閱讀 點選標題可跳轉

    看完本文有收獲?請轉發分享給更多人

    推薦關註「DotNet」,提升.Net技能

    點贊和在看就是最大的支持❤️