如何创建Func <tsource>到Expression <func <tsource,tvalue>&gt; </func <tsource,tvalue> </tsource>

时间:2015-01-21 07:11:44

标签: c# asp.net asp.net-mvc linq delegates

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&gt;

1 个答案:

答案 0 :(得分:0)

您无法将Func<>“转换”为Expression<Func<>>。 Func基本上是编译表达式,所以只有解决方案是反编译它,但它不容易实现。

你可以做的是用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 }
    );
}