我花了好几个小时但没有管理......
请参阅下面的示例 - 如何做到这一点?
我们的想法是在类'使用者传递Func<dynamic, dynamic>
的情况下构建类型Expression<Func<T1,T2>>
的编译表达式。我已经能够解决这个问题(感谢SO)如果T1和T2类型在设计时已知。但是我正在寻找一种解决方案,在这种情况下T1和T2在设计时是不知道的。
这可能吗?
非常感谢!
public class ExpressionExample
{
private Func<dynamic, dynamic> _compiledExpression;
public ExpressionExample(LambdaExpression lambdaExpression)
{
// How does one get a compiled expression of type
// Func<dynamic, dynamic> at this point given lambdaExpression?
}
}
答案 0 :(得分:1)
除非我不理解你的问题,否则这应该有效:
public class ExpressionExample<T1, T2>
{
private Func<dynamic, dynamic> _compiledExpression;
public ExpressionExample(
Expression<Func<T1, T2>> lambdaExpression)
{
// How does one get a compiled expression of type
// Func<dynamic, dynamic> at this point given lambdaExpression?
var func = lambdaExpression.Compile();
_compiledExpression = (dynamic x) => (dynamic)func((T1)x);
}
}
答案 1 :(得分:0)
您需要在Compile
上调用LambdaExpression
,然后构建并编译另一个使用Expression.Invoke(Expression, params Expression)
调用该委托的表达式树。
答案 2 :(得分:0)
我自己也在寻找类似的东西。作为一个新手,我不会试图完整地回答你的问题,但也许你可以从forums.asp.net给我的答案中找到答案,我也在stackoverflow上发布了here。