我不是在寻找,我在寻找原因?我找不到直截了当的答案。
答案 0 :(得分:12)
是。 CollectionBase是以前的尝试,也是一种提供类型安全的方法。
泛型为您提供了这些优势,但又增加了两个巨大优势:
编辑:
我想到了将代码转移到使用泛型集合的其他几个令人信服的理由:
Cast<T>
(CollectionBase不实现IEnumerable<T>
,仅IEnumerable
)。答案 1 :(得分:4)
以仅键入<type>
为代价,对所有不同类型的收藏品进行强类型访问?
编辑: 如果要删除现有代码和工作代码,唯一的原因就是其他地方提到的性能。
答案 2 :(得分:2)
键入安全性,无需为每种类型编写大量代码。如果你看一下MSDN CollectionBase documentation中的例子,你必须编写很多样板代码来制作Int16的类型安全集合。随着泛型它有点短:
var myListofInt16 = new List<Int16>();
您不必编写的每一段代码都是您不会错的代码(我说因为它适用于我,我相信它也适用于其他人! ; - )
答案 3 :(得分:1)
使用CollectionBase,您需要扩展以提供泛型本机执行的功能。您必须在所有管道中写入,以便考虑您从中创建的子类的类型安全性。有了泛型,没有必要。你需要转换为泛型吗?这取决于你的情况,但我不会继续使用它。
另外,使用泛型而不是集合库为您提供了写入.net的所有扩展方法,以使常见任务更容易。 MS正在推动仿制药的使用,并积极开发其应用。他们很可能会继续发展他们的功能。
答案 4 :(得分:0)
你想使用泛型来避免拳击。
这是一个很好的article列出了泛型的好处。
答案 5 :(得分:0)
还有另一个原因。
LINQ。
您只能对实现IEnumerable<T>
的集合使用LINQ方法
要在CollectionBase
上使用LINQ,您必须先拨打Cast<T>
,或在课程上手动实施IEnumerable<T>
。
通过继承ObjectModel.Collection<T>
,您可以免费获得IEnumerable<T>
实施。