将表达式转换为另一个表达式

时间:2014-07-06 06:32:18

标签: c# generics casting expression graphdiff

我有以下表达

Expression<Func<T, object>> expr1;

有没有办法把它投到

Expression<Func<IUpdateConfiguration<T>, object>>

[更新]

或者从现有的Expression<Func<IUpdateConfiguration<T>, object>>创建新的Expression<Func<T, object>>

1 个答案:

答案 0 :(得分:3)

没有。第一个函数采用T并返回object。第二个接受IUpdateConfiguration<T>并返回object。除非T也是IUpdateConfiguration<T>,否则您无法将其转换为IUpdateConfiguration<T>。如果您知道将T转换为Expression<Func<IUpdateConfiguration<T>, T> expr2; 的方法,则可以制作 new 表达式,但这与转换不同。

例如,鉴于此:

Expression<Func<IUpdateConfiguration<T>, object>> = 
    (IUpdateConfiguration<T> t) => expr1(expr2(t));

您可以按照以下方式制作所需的功能:

{{1}}

但是这将与原始表达体完全不同。这可能是也可能不是问题,取决于你想要完成的事情。