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

Osk*_*ren 3 c# generics

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

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

就个人而言,我倾向于IList<object>,因为我认为这更清楚地表明我们确实接受了"任何事情".当输入参数时,IList我们无法立即判断此方法是否接受任何内容,或者缺少泛型是由于历史记录还是草率编码.

Mat*_*zer 5

有一个很好的理由:LINQ及其扩展方法.这些没有针对pre-generics时代类型实现.您将需要调用Cast<T>IList采取LINQ的优势!

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

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

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