Ответ 1
Поскольку компилятор не может понять, какой тип RHS имеет
var add = (x, y) => x + y;
Любой тип, поддерживающий оператор +
, является кандидатом, и поскольку тип x и y не является ограничением того же типа. Там было исключено множество возможных операторов +
, которые могли бы использоваться, и поэтому набор возможных типов для x и y довольно велик, но для определения типа добавления компилятор должен иметь возможность уменьшить набор до только один тип для x и один для y (не совсем верно, возможно, что и базовый класс, и производный класс будут соответствовать), и все же, даже если компилятор может определить тип для x и y или что вы указали типы чтобы сказать int
, вы все равно останетесь с тем, что оба
Expression<Func<int,int,int>>
и Func<int,int,int>
являются возможными типами для добавления
Существует несколько вариантов уменьшения набора возможных типов. Компилятор может попытаться посмотреть, как add
будет использоваться позже, но не (и, возможно, не смог бы определить типы, даже если бы это было сделано)