c#3.0中引入了運算式樹狀架構,使用泛型運算式樹狀架構可以方便的解決問題。舉一個簡單的例子,我們可以使用它來完成不同類型的數值的加減乘除。首先,來看一下簡單的思路:(下述代碼僅僅以加法運算來樣本)
static class Calculate<T>
{
public static T Add(T num1, T num2)
{
return num1 + num2;
}
}
然而這個代碼編譯是不能通過的,因為泛型不可以進行相加的操作。這種簡單的思路行不通,下面來看使用運算式樹狀架構的解決方案:
static class Calculate<T>
{
public static T Add(T num1, T num2)
{
//建立參數運算式樹狀架構節點1
ParameterExpression p1 = Expression.Parameter(typeof(T), "left");
//建立參數運算式樹狀架構節點2
ParameterExpression p2 = Expression.Parameter(typeof(T), "right");
//兩個參數節點構成二叉樹節點,節點關係為求和
BinaryExpression p_add = Expression.Add(p1, p2);
//定義lambda運算式,這個可以看一下msdn的說明,(Func<T,T,T>也是一個類型)
Expression<Func<T, T, T>> fe = Expression.Lambda
<Func<T, T, T>>(p_add, new ParameterExpression[] { p1, p2 });
//轉化為匿名代理
Func<T, T, T> fc = fe.Compile();
//返回結果
return fc(num1, num2);
}
}
這樣就可以對不同類型的數值進行加操作了:
Console.WriteLine(Calculate<int>.add(3, 5));