Open impworks opened 10 years ago
Проблема оказалась шире.
Поскольку у выражения (-> 1)
нет аргументов с неизвестным типов, его тип - Func<int>
, и ресолвер методов вполне обоснованно посчитает функцию test
.
Для исправления можно было бы либо считать все лямбда-выражения Lambda<T...>
до тех пор, пока они не присвоены куда-либо - однако это сломает возможность использовать методы, переопределенные по возвращаемому значению лямбды, например IEnumerable.Sum()
. Так что пока откладываем.
При использовании литерала лямбды следует передавать ей тип возвращаемого значения из контекста:
При переиспользовании уже созданного делегата, если типы не ковариантны, должно выдаваться сообщение об ошибке.
Кроме того, следует не забыть о случае, когда тип возвращаемого значения является обобщенным аргументом метода: