Это интересно - я недавно обнаружил то же самое .
Вызовы методов расширения описаны в разделе 7.6.5.2 спецификации C #, и мне кажется, что все условия там выполнены ... потому что это говорит в терминах выражения, неявно преобразуемого в первый тип параметра (что в данном случае). Это говорит о том, что либо есть ошибка в компиляторе (возможно, но маловероятно), либо не выполнено одно из более ранних условий того, что он является допустимым вызовом метода.
Я подозреваю, что проблема в том, что лямбда-выражение не является первичным выражением в терминологии спецификаций - к сожалению, мой спецэффект сегодня не слишком силен из-за простуды. Большая часть остальной части механизма вызова метода, вероятно, полагается на знание типа цели метода, которая в этом случае неизвестна.
Обратите внимание, что у другого бросающегося в глаза "нетипизированного выражения" есть та же проблема - вы не можете вызывать методы расширения для литерала null
.
Очень редко это ограничение вызывает боль, но большую часть времени у меня не возникает особых проблем с ним - и я подозреваю, что это делает компилятор намного проще для реализации ...