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

5
我有以下表达式: Expression<Func<T, object>> expr1; 有没有办法将它转换为 Expression<Func<IUpdateConfiguration<T>, object>>
[更新]
或者从现有的Expression<Func<T, object>>创建一个新的Expression<Func<IUpdateConfiguration<T>, object>>
1个回答

3
不。第一个函数接受一个 T 并返回一个 object。第二个函数接受一个 IUpdateConfiguration<T> 并返回一个 object。除非 T 也是 IUpdateConfiguration<T>,否则你无法进行转换。如果你知道将 IUpdateConfiguration<T> 转换为 T 的方法,你可以使用 new 表达式,但这与强制转换不同。
例如,给定以下内容:
Expression<Func<IUpdateConfiguration<T>, T> expr2;

你可以像这样制作你想要的函数:

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

但是这将会有完全不同的表达方式,与原始版本不同。这可能是一个问题,也可能不是,具体取决于你想要实现什么。


expr1 究竟是一个函数? - Unihedron
1
@Unihedron:通过它的声明。更具体地说,它是该函数类型的表达式。表达式用于在抽象语法树上进行反射,并检查表达式的实际内容。但是输入和输出类型在通用参数中指定。分别为 Tobject - recursive
你能举个例子解释一下你上一个解决方案(创建新表达式)吗? - Masoud
谢谢,但我认为你的示例有一些问题(第二段代码),expr是什么?我有一个 Expression<Func<T, object>> expr1; 并想创建一个新的 Expression<Func<IUpdateConfiguration<T>, object>> - Masoud
抱歉,我的意思是表达式1,而不是表达式。 - recursive
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接