Почему Funcs не принимает более 16 аргументов?

Поскольку Javascript - это язык, в котором я наиболее разбираюсь, я знаком с использованием функций как первоклассных объектов. Я думал, что в C # не хватает этой функции, но потом я услышал о Func и Action и delegate , которые, на мой взгляд, довольно крутые.

Например, вы можете объявить Func , которая объединяет две строки и помещает между ними пробел, например:

Func concat = (a,b) => a + " " + b;

Я заметил, что когда вы набираете

Func<

, IntelliSense показывает, что у него 17 перегрузок. :

delegate System.Func
delegate System.Func
delegate System.Func
...snip...
delegate System.Func

Это меня рассмешило. Я просмотрел документы MSDN для Func и снова засмеялся. Это заставило меня попытаться объявить Func с 17 аргументами. Это вызывает ошибку ( Использование универсального типа 'System.Func ' требует 1 аргумента типа ).

Я могу согласиться с тем, что, вероятно, не рекомендуется иметь Func , которая принимает более 16 аргументов. Даже в этом случае это кажется громоздким способом реализации Func . Для этого требуется документировать 17 тривиально различных перегрузок. Это все, что ему действительно нужно знать: последний параметр типа - это возвращаемый тип, а все параметры типа перед ним - это типы аргументов.

Итак, что я мог сделать, если бы хотел создать Func с более чем 16 параметрами? Почему вообще есть лимит? Почему C # не может просто позволить вам объявить Func с произвольным числом аргументов?

22
задан Kirill Polishchuk 29 December 2014 в 21:47
поделиться