c#LINQ表達樹

一隻老鼠發表於2017-09-18

如果你已經用過LINQ, 你應該知道函式方式,以及包含的豐富的類庫, 如果你仍不瞭解, 那根據下面的連結去熟悉一下 the LINQ tutorial,  lambda 

表達樹提供了豐富的包含引數的函式方式。

靜態樹解析

一個表達樹是定義程式碼的資料結構

var sum = 1 + 2;

二元表示式, 更準確的來說,是一個二元相加表示式, 二元表示式包含二個結點, 二個結點都是固定表示式, 左邊是1, 右邊是2

這是一個樹的完整體

定義定量狀態 (var sum = 1 + 2;)

  • 顯示宣告變數 (var sum)
    • 顯示宣告var型別 (var)
    • 宣告變數名稱 (sum)
  • 操作型別 (=)
  • 二元相加表示式 (1 + 2)
    • 左邊運算元(1)
    • 相加運算子 (+)
    • 右邊運算元 (2)
var finalAnswer = this.SecretSauceFuncion(
    currentState.createInterimResult(), currentState.createSecondValue(1, 2),
    decisionServer.considerFinalOptions("hello")) +
    MoreSecretSauce('A', DateTime.Now, true);

對比表達樹, 上述的方式就太不直觀, 擴充套件性差

在.NET Core framework中存在大量的表示式型別, 你可以從這獲取here

// Addition is an add expression for "1 + 2"
var one = Expression.Constant(1, typeof(int));
var two = Expression.Constant(2, typeof(int));
var addition = Expression.Add(one, two);

以上簡單的使用一些靜態類建立表達樹

相關文章