我已经在MSDN上搜索了它,我读到了它是非泛型的定义.... 但我的问题是我不明白它的用途和使用时间。所以我希望任何人都可以帮助我。谢谢。
答案 0 :(得分:5)
除了不了解泛型的旧代码之外,还有很多情况下你知道你有一个列表的数据,但你不知道什么提前。数据绑定是一个典型的例子; DataSource属性通常会检查IList(通常是IListSource),然后查看对象以查看可用的属性。在这种情况下,它不能使用泛型。
事实上,任何时候使用反射IList都比IList-of-T更方便,因为泛型和反射不能很好地结合在一起。它可以做到,但这是一个痛苦。不幸的是,由于IList-of-T并非来自IList,因此有些情况可能会失败 - 但这是一个很好的95%规则。
特别是,IList允许您使用索引器,并添加/删除项目; IEnumerable不允许你做的事情。
大多数应用级代码(即您为应用程序编写的日常代码)应该关注通用版本;但是,还有很多必须使用反射的基础设施代码。
答案 1 :(得分:3)
IList
(非通用版本)是C#第一版的剩余部分。
使用C#2和.NET Framework 2.0,在语言中添加了泛型,并添加了集合类型的通用实现。因此,不再需要非泛型版本,但它们无法从框架中删除,因为它会使从.NET 1.1到2.0的代码移植成为一种痛苦。
今天,您几乎总是使用IList<T>
,IList
仍然存在的主要原因是出于向后兼容的原因。
答案 2 :(得分:1)
这是在.NET 2.0中引入泛型之前存在的接口。
这是为了向后兼容。
使用通用版本。
答案 3 :(得分:1)
它是一个接口,通常由集合类实现,它旨在提供类似于方法的列表,但在.net版本中小于2.0,即没有通用的介绍,所以如果你使用的是框架版本1.0,1.1,那么你会看到这个IList的用法