我在篡改 Expressions 并且在某些时候感到困惑
我们可以将相同的 LamdaExpression 分配给 Expression 和/或 Func。但是我们不能将 Func 分配给表达式(或将表达式分配给 Func)。为什么我们不能这样做?我查找是否定义了 Expression 和 Func 之间的转换运算符,但我找不到。
Func<int, int> sumFunc = i => i + i; Expression<Func<int, int>> sumExp = i => i + i; // sumExp = sumFunc; // Cannot convert source type 'System.Func<int,int>' to target type 'System.Linq.Expressions.Expression<System.Func<int,int>>' // sumFunc = sumExp; // Cannot convert source type 'System.Linq.Expressions.Expression<System.Func<int,int>>' to target type 'System.Func<int,int>'
即使我们不能将 LambdaExpression 分配给对象。再说一次,为什么我们不能这样做?
// object o = i => i + i; // Cannot convert source type 'lambda expression' to target type 'object'
我认为编译器有一些东西。如果是这样,我们是否可以编写我们的自定义类型以这种(令人困惑的)方式表现并利用某些东西。