式をいじっていて、いくつかの点で混乱しました
同じ LamdaExpression を Expression および/または Func の両方に割り当てることができます。ただし、Func を Expression に (または Expression を 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'
コンパイラには何かがあると思います。もしそうなら、この (紛らわしい) 方法で動作し、何かを利用するカスタム型を作成できますか?