void ITest<TSource, TDestination>.TestMethod<TValue>(Expression<Func<TDestination, TValue>> destination, Func<TValue> value)
{
// i want to create Func<TValue> to Expression<Func<TSource, TValue>>
}
我有一个方法,它将采用参数 Func。
我想将 Func 转换为 Expression>
你不能“转换”Func<>
至 Expression<Func<>>
. Func 基本上是编译过的 Expression,所以唯一的解决办法就是反编译它,但这并不容易。
你可以做的是包装Func<>
与 Expression
,但我不确定它是否给你带来了什么。
例子:
public static Expression<Func<T>> Wrap<T>(Func<T> f)
{
return Expression.Lambda<Func<T>>(
Expression.Invoke(Expression.Constant(f))
);
}
public static Expression<Func<T1, T2>> Wrap<T1, T2>(Func<T1, T2> f)
{
var p1 = Expression.Parameter(typeof (T1));
return Expression.Lambda<Func<T1, T2>>(
Expression.Invoke(Expression.Constant(f), p1),
new[] { p1 }
);
}