表達式計算開源組件(NCalc.NetCore)


首先,這款組件是開源的,NCalc是.net中的一個數學表達式求值程序。NCalc可以解析任何表達式並計算結果,包括靜態或動態參數和自定義函數。

Nuget安裝依賴,如下:

簡單表達式:

Expression e = new Expression("2 + 3 * 5");
var result=e.Evaluate();

支持.NET數據類型

支持int,date,float,bool,string等數據格式

處理Math中的數學函數

Debug.Assert(0 == new Expression("Sin(0)").Evaluate());
Debug.Assert(2 == new Expression("Sqrt(4)").Evaluate());
Debug.Assert(0 == new Expression("Tan(0)").Evaluate());

自定義計算表達式

public static object Calcuate(string expression,Snapshot snapshot,Status status)
{
    Expression e = new Expression(expression);
    e.EvaluateFunction += delegate (string name, FunctionArgs args)
    {
        if (name.Equals("Tag"))
        {
            string tagName = args.Parameters[0].Evaluate().ToString();
            RTData rtData=snapshot.ReadTag(tagName);
            args.Result = rtData.Value;
        }
        else if (name.Equals("Loop"))
        {
            string loopName = args.Parameters[0].Evaluate().ToString();
            args.Result = status.GetLoopValue(loopName);
        }
    };
    return e.Evaluate();
}

其中Tag,Loop就是自定義函數,可以根據自身邏輯進行編寫。
調用代碼基本是這樣,這是一個遞歸調用的過程,先解析出Tag和Loop,然后再依次解析參數。
需要注意的是每個函數返回的值類型必須一致,否則在做四則運算時就會報錯了,這個很好理解。


免責聲明!

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



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