这是来自 MiscUtil 库的一段代码 (由 Jon Skeet 和 Marc Gravell 编写):
static T Add<T>(T a, T b) {
//TODO: re-use delegate!
// declare the parameters
ParameterExpression paramA = Expression.Parameter(typeof(T), "a"),
paramB = Expression.Parameter(typeof(T), "b");
// add the parameters together
BinaryExpression body = Expression.Add(paramA, paramB);
// compile it
Func<T, T, T> add = Expression.Lambda<Func<T, T, T>>(body, paramA, paramB).Compile();
// call it
return add(a,b);
}
它在代码下面说:
这不是很贵吗?
好吧,编译运算符并非易事,但静态构造函数确保我们只为每个签名执行一次。
Func<T, T, T>
每次Add<T>(T a, T b)
调用方法时都没有编译,但 insted 只编译一次的原因是什么?