NCalc 是一個可以進行表達式計算的一系列程序集( Assembly )。咱們主要使用 Expression
類,這個類有一個函數 Evaluate()
可以計算表達式的值。表達式採用字符串形式傳入。框架
舉例:函數
Expression e = new Expression("2 * 3"); object result = e.Evaluate(); Console.WriteLine(result);
很簡單,建立一個 Expression
對象,經過構造函數傳入須要計算的表達式字符串。調用 Evaluate()
方法進行解析,獲得計算結果。性能
NCalc 默認對大小寫敏感,若是想要忽略大小寫,只須要添加一個參數便可,lua
Expression e = new Expression("aBs(-1)", EvaluateOptions.IgnoreCase) Debug.Assert(1M, e.Evaluate());
若是表達式有語法錯誤,求值會拋出 EvaluationException。code
try { new Expression("(3 + 2").Evaluate(); } catch(EvaluationException e) { Console.WriteLine("Error catched: " + e.Message); }
固然,咱們也能夠在求值以前經過 HasErrors()
函數來檢測語法錯誤。對象
Expression e = new Expression("a + b * ("); if(e.HasErrors()) { Console.WriteLine(e.Error); }
一個 Expression 對象只會被編譯一次。所以經過改變參數來重用表達式對象可以提升程序性能。這樣每次計算就只須要遍歷表達式樹就行了。字符串
實際上,每一個編譯過的表達式都會緩衝起來,咱們徹底不須要本身考慮重用表達式。it
使用 CacheEnabled
能夠從框架層面更改默認設置。io
Expression.CacheEnabled = false;
也能夠對某個特定的表達式對象進行設置編譯
Expression e = new Expression("1 + 1", EvaluateOption.NoCache);