Подтвердить что ты не робот

Почему анонимный класс не обладает свойством лямбда, но может иметь свойство Func <>?

Я пытаюсь изучить ограничения на С# для анонимного типа. Рассмотрим следующий код:

  var myAwesomeObject = new {
      fn1 = new Func<int>(() => { return 5; }),
      fn2 = () => { return 5; } 
  };

Итак, у нас есть два свойства, которые фактически являются функциями:

  • fn1: A Func<int>, который возвращает 5.
  • fn2: лямбда-функция, которая возвращает 5.

Компилятор С# рад работать с fn1, но жалуется на fn2:

не может назначить lambda-выражение для свойства анонимного типа.

Может кто-нибудь объяснить, почему все нормально, а другое нет?

4b9b3361

Ответ 1

Поскольку компилятор не знает тип () => { return 5; }; это может быть Func<int>, но это может быть и любой другой делегат с одной и той же сигнатурой (он также может быть деревом выражений). Вот почему вы должны явно указать тип.