iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0

運算式樹 Expression tree

Expression tree 是一個樹狀結構的物件, 這個樹上的每一個節點都是一個運算節點(Expression Node), Expression Node 都是 Expression 類別, 常見的 Expression Node 有, ConstantExpression, ParameterExpression, MethodCallExpression, MemberExpression, LambdaExpression, BinaryExprfession, 可以利用將 lambda 運算式賦值給 Expression<TDelegate> 類型, 來建立 Expression tree, Expression<TDelegate> 經過 Compile 方法又會得到 TDelegate 委託類

using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

Expression<Func<int, int>> squareExp = num => num * num;
Func<int, int> square = squareExp.Compile();
Console.WriteLine(square(3));

也可以使用 Expression 類別的靜態方法來建立, 如果要建立 ConstantExpression 就使用 Constant 方法建立, ParameterExpression 就使用 Parameter 方法

using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

ParameterExpression numParam = Expression.Parameter(typeof(int), "num");
BinaryExpression numSquare = Expression.Multiply(numParam, numParam);
Expression<Func<int, int>> squareExp = Expression.Lambda<Func<int,int>>(numSquare, numParam);
Func<int,int> square = squareExp.Compile();
Console.WriteLine(square(3));

上一篇
C# Lambda
下一篇
C# .Net 使用 ADO.NET 連接資料庫
系列文
C# 與 .Net Core 雜記14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言