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

Mas*_*oud 5 c# generics expression casting graphdiff

我有以下表达方式

Expression<Func<T, object>> expr1;

有没有办法把它投入

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

[更新]

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

rec*_*ive 3

不。第一个是一个接受 aT并返回一个 的函数object。第二个接受 aIUpdateConfiguration<T>并返回一个object。除非T也是 a IUpdateConfiguration<T>,否则您不能投射它。IUpdateConfiguration<T>如果您知道将 a 转换为 a 的方法T,则可以创建一个表达式,但这与强制转换不同。

例如,考虑到:

Expression<Func<IUpdateConfiguration<T>, T> expr2;
Run Code Online (Sandbox Code Playgroud)

你可以像这样制作你想要的功能:

Expression<Func<IUpdateConfiguration<T>, object>> = 
    (IUpdateConfiguration<T> t) => expr1(expr2(t));
Run Code Online (Sandbox Code Playgroud)

但这将会拥有与原本完全不同的表情体。这可能是问题,也可能不是问题,具体取决于您想要实现的目标。