我有一个当前使用 aFunc<T1, T2>
作为参数的函数。
我希望它使用Expression<Func<T1, T2>>
as 参数,以便在某些情况下可以遍历表达式树。
对于我想使用该函数的每个调用,因此我需要Compile()
表达式。为了不必重新编译所有表达式,我想将它们放入字典中。
对我的方法的调用如下所示:
var foo = MyFunc(x => x.Field);
关于Expression
用作字典键的以下解决方案是否正确?
static Dictionary<Expression<Func<T1, T2>>, Func<T1, T2>> s_functions = new Dictionary<Expression<Func<T1, T2>>, Func<T1, T2>>();
public T2 MyFunc(Expression<Func<T1, T2>> selectorExpression)
{
if (!s_functions.ContainsKey(selectorExpression))
{
s_functions.Add(selectorExpression, selectorExpression.Compile());
}
Func<T1, T2> selector = s_functions[selectorExpression];
}
编辑
从性能的角度来看,什么是解决它的好方法?