Expression Tree
最近在看Linq的Expression Tree,主要是做Enterprise Library的例子的时候,在数据层搭建要用泛型来简化代码。
Expression Tree的例子比较多,可以参考老赵的“表达式树”配合“泛型参数字典”定义通用操作、LINQ与DLR的Expression tree 系列。
我仿照通用操作写了个减法操作:
public static class EnumerableExtensions
{
public static IEnumerable<T> Diminish<T>(this IEnumerable<T> source)
{
T diminish = default(T);
bool first = true;
foreach (var item in source)
{
if (first)
{
diminish = item;
first = false;
}
else
{
diminish = SubtractOperation<T>.Substract(diminish, item);
}
}
return diminish;
}
}
public static class SubtractOperation<T>
{
static SubtractOperation()
{
var x = Expression.Parameter(typeof(T), "x");
var y = Expression.Parameter(typeof(T), "y");
var subtract = Expression.Subtract(x, y);
var lambda = Expression.Lambda<Func<T, T, T>>(subtract, x, y);
s_subtract = lambda.Compile();
}
private static Func<T, T, T> s_subtract;
public static T Substract(T x, T y)
{
return s_subtract(x, y);
}
}
其它的也没什么好说的,三四年前的东东了。

浙公网安备 33010602011771号