Я не верю, что это ошибка компилятора - раздел 7.6.11 спецификации C # 4 (оператор typeof
), похоже, не дает какого-либо синтаксиса, который бы приводил его к допустимости; Func<Func<>>
не является ни действительной типом конструкции, ни допустимым несвязанным именем типа конструкции.
Что касается почему это так, хотя: я предполагаю, что это очень редко необходимо (я никогда даже не думал использовать его раньше, и не слышал, чтобы кто-то его запрашивал) и поэтому считается, что дополнительная сложность в проектировании языка, реализации компилятора и тестировании перевешивает выгоду. Это часто имеет место с вопросами «почему у C # нет функции X», поскольку Эрик Липперт любит указывать:)
Я был приятно удивлен, увидев, что можно сделать во время выполнения:
Type unbound = typeof(Func<>);
Type partiallyBound = unbound.MakeGenericType(new[] { unbound });
Console.WriteLine(partiallyBound);
Я наполовину ожидал, что он будет недействительным в системе типов .NET, хотя, я полагаю, это могло вызвать другие проблемы.