多年以来,我们大多数时候都使用通用集合。有时我们确实需要任何东西的集合(好吧,通常只有几个不同的东西,但没有共同的基类)。对于这种情况,我们可以使用IList
或通用IList<object>
作为方法参数和属性的类型。
有什么理由比较喜欢一个吗?性能特点?
就我个人而言,我倾向于IList<object>
,因为我认为这更清楚地说明了我们真的接受了什么&#34;。当参数输入为IList
时,我们无法立即判断此方法是否接受任何内容,或者缺少泛型是由于历史记录还是草率编码。
答案 0 :(得分:5)
有一个很好的理由:LINQ及其扩展方法。这些没有针对pre-generics时代类型实现。 您需要致电Cast<T>
IList
以利用LINQ!
另一点是,由于最新的.NET版本支持协方差和逆变,并且大多数通用接口支持其中一个(fe IEnumerable<out T>
,T
是协变的),因此您可以轻松地向下转换或向上转换接口的对象通用参数和对象或非特定类型的通用参数。
结论:为什么应该首选仿制药?