NCalc 學習筆記 (二)

簡介

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);
相關文章
相關標籤/搜索