I came across the beautiful Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> delegate in C# .NET 4.5 today. I assume 16 was an arbitrary place to stop (what methods have more than 16 parameters?) but it got me thinking: is it possible in C# to specify that a generic type can have any number of type arguments? in a similar way that the params keyword for methods allows for any number of arguments for a method. Something like this:
public class MyInfiniteGenericType<params T[]> { ... }
where inside the class you could then access the type arguments by enumerating through them or using T[index] in the same way that params allows within methods.
I've never had a use for this personally, but the Func delegate would be a perfect place to use it. There would be no need for 16 different types of Func!
So my question is, can this be done in any way in C#, and if not is this a silly idea?