IList和IList <object>之间的比较 - 应该是首选吗?</object>

时间:2013-02-24 10:54:51

标签: c# generics

多年以来,我们大多数时候都使用通用集合。有时我们确实需要任何东西的集合(好吧,通常只有几个不同的东西,但没有共同的基类)。对于这种情况,我们可以使用IList或通用IList<object>作为方法参数和属性的类型。

有什么理由比较喜欢一个吗?性能特点?

就我个人而言,我倾向于IList<object>,因为我认为这更清楚地说明了我们真的接受了什么&#34;。当参数输入为IList时,我们无法立即判断此方法是否接受任何内容,或者缺少泛型是由于历史记录还是草率编码。

1 个答案:

答案 0 :(得分:5)

有一个很好的理由:LINQ及其扩展方法。这些没有针对pre-generics时代类型实现。 您需要致电Cast<T> IList以利用LINQ!

另一点是,由于最新的.NET版本支持协方差和逆变,并且大多数通用接口支持其中一个(fe IEnumerable<out T>T是协变的),因此您可以轻松地向下转换或向上转换接口的对象通用参数和对象或非特定类型的通用参数。

结论:为什么应该首选仿制药?

  • 通用类型具有更好的性能,因为它们可以避免大量的转换。
  • 较新的API依赖于通用集合和接口。
  • 有很多理由认为在同一个列表中混合不同类型的对象可能是危险的,而且编码/设计决策也很糟糕。对于你将存储任何类型对象的少数情况,拥有LINQ和许多其他新的API和功能作为你的朋友是一个强大的理由,不要重新发明轮子,节省大量的时间!