Ответ 1
Поскольку компилятор не знает тип () => { return 5; }
; это может быть Func<int>
, но это может быть и любой другой делегат с одной и той же сигнатурой (он также может быть деревом выражений). Вот почему вы должны явно указать тип.
Я пытаюсь изучить ограничения на С# для анонимного типа. Рассмотрим следующий код:
var myAwesomeObject = new {
fn1 = new Func<int>(() => { return 5; }),
fn2 = () => { return 5; }
};
Итак, у нас есть два свойства, которые фактически являются функциями:
fn1
: A Func<int>
, который возвращает 5
.fn2
: лямбда-функция, которая возвращает 5
.Компилятор С# рад работать с fn1, но жалуется на fn2:
не может назначить lambda-выражение для свойства анонимного типа.
Может кто-нибудь объяснить, почему все нормально, а другое нет?
Поскольку компилятор не знает тип () => { return 5; }
; это может быть Func<int>
, но это может быть и любой другой делегат с одной и той же сигнатурой (он также может быть деревом выражений). Вот почему вы должны явно указать тип.