Я искал выражения, и я немного смутился в некоторых точках
-
Мы можем назначить одно и то же выражение LamdaExpression для выражения и/или 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'
-
Я думаю, что есть что-то о компиляторе. Если да, можем ли мы написать наши пользовательские типы, которые ведут себя в этой (запутанной) манере и что-то используют.