C# 把一个表情投射到另一个表情上
我有下面的表达C# 把一个表情投射到另一个表情上,c#,generics,casting,expression,graphdiff,C#,Generics,Casting,Expression,Graphdiff,我有下面的表达 表达式expr1 有没有办法把它扔给我 表达式 [更新] 或者从现有的表达式创建一个新的表达式?否。第一个是一个函数,它接受一个T并返回一个对象。第二个接受IUpdateConfiguration,并返回对象。除非T也是IUpdateConfiguration,否则不能强制转换此选项。如果您知道将IUpdateConfiguration转换为T的方法,则可以创建新表达式,但这与强制转换不同 例如,鉴于此: Expression<Func<IUpdateConfigur
表达式expr1代码>
有没有办法把它扔给我
表达式
[更新]
或者从现有的表达式
创建一个新的表达式
?否。第一个是一个函数,它接受一个T
并返回一个对象
。第二个接受IUpdateConfiguration
,并返回对象
。除非T
也是IUpdateConfiguration
,否则不能强制转换此选项。如果您知道将IUpdateConfiguration
转换为T
的方法,则可以创建新表达式,但这与强制转换不同
例如,鉴于此:
Expression<Func<IUpdateConfiguration<T>, T> expr2;
表达式expr1(expr2(t));
但这将有一个与原始表达式完全不同的表达式体。这可能是问题,也可能不是问题,这取决于您试图完成的任务。函数的确切定义是什么?@Unihedron:通过它的声明。更具体地说,它是该函数类型的表达式。表达式用于对抽象语法树进行反射,并检查表达式的实际内容。但是输入和输出类型是在泛型参数中指定的T
和object
分别。你能用一个例子来解释你的上一个解决方案(创建新表达式)吗?@Masoud:我提供了一个生成新表达式的例子,并更正了我之前的一个拼写错误。谢谢,但我认为你的例子有一些问题(第二段代码)什么是expr?我有一个表达式expr1
并希望创建一个新的表达式
。
Expression<Func<IUpdateConfiguration<T>, object>> =
(IUpdateConfiguration<T> t) => expr1(expr2(t));