前言
推薦一個強大動態運算式解析器,方便我們在計畫中,動態執行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 { get; set; } }
計畫地址
https://github.com/dynamicexpresso/DynamicExpresso
- EOF -
推薦閱讀 點選標題可跳轉
看完本文有收獲?請轉發分享給更多人
推薦關註「DotNet」,提升.Net技能
點贊和在看就是最大的支持❤️