Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>今天,我在C#.NET 4.5中遇到了漂亮的代表。我以为16是一个任意的停止位置(哪些方法具有16个以上的参数?),但是这使我想到: 在C#中是否可以指定泛型类型可以具有任意数量的类型参数? 以类似于方法的params关键字为方法允许任意数量的参数的方式。像这样:
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>
public class MyInfiniteGenericType<params T[]> { ... }
然后,您可以在类内部的位置通过枚举它们或使用T[index]与方法params内部相同的方式来访问类型参数。
T[index]
params
我从来没有亲自使用过它,但是Func代表将是一个使用它的理想场所。不需要16种不同类型的Func!
所以我的问题是,这可以在C#中以任何方式完成, 如果不是,那是一个愚蠢的想法 吗?
C#中是否可以指定泛型类型可以具有任意数量的类型参数?
不,恐怕C#没有这样的东西。
从根本上讲Func<T>,Func<T1, T2>就CLR而言,它们是完全不相关的类型,没有什么params可以指定多个类型参数了。
Func<T>
Func<T1, T2>
至于它的效用:我可以看到它有用的情况,但是我怀疑它们很少见,意味着该功能没有超过“收益/成本”的门槛。(请注意,几乎肯定也需要更改CLR。)