我有以下表达
Expression<Func<T, object>> expr1;
有什么办法可以将其转换到
Expression<Func<IUpdateConfiguration<T>, object>>

[更新]

还是从现有Expression<Func<IUpdateConfiguration<T>, object>>创建一个新的Expression<Func<T, object>>

最佳答案

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

例如,鉴于此:

Expression<Func<IUpdateConfiguration<T>, T> expr2;

您可以像这样使所需的功能:
Expression<Func<IUpdateConfiguration<T>, object>> =
    (IUpdateConfiguration<T> t) => expr1(expr2(t));

但这将具有与原始表达主体完全不同的表达主体。根据您要完成的工作,这可能是问题,也可能不是问题。

10-06 10:12