经过深思熟虑并研究了 的实现ArrayList
,我个人真的很想说它已经过时了,我没有理由在 2.0 之后使用这个类。但是由于它没有标记为[Obsolete]
,有什么我不知道的用法,比使用泛型类更好吗?如果是,请举个例子。谢谢。
EDIT举List<T>
个例子,它提供了 的所有功能ArrayList
,并且是强类型的。那么我们什么时候需要使用ArrayList
呢?也许有时它有更好的表现?我不知道。如果你能给我看一些特别的东西,我将不胜感激ArrayList
。
我认为它应该被认为对于新代码实际上已经过时,但是没有令人信服的理由将它标记为过时并在所有在 2.0 发布之前编写的代码中创建警告。
根据我的经验,大多数被 Microsoft 标记为过时的类型和成员在某些方面都是非常危险的,如果您仍然有使用它们的代码库,应该真正修复它们。虽然使用ArrayList
是痛苦的并且(至少在理论上)容易在执行时而不是编译时发现与类型相关的错误,但该类型的工作已经足够好......通常确实没有令人信服的理由来更改现有代码。当我碰巧正在处理正在使用的代码区域时,我通常会考虑这种更改ArrayList
,而不是积极寻找它的每一种用法。
实际上,它已从 Silverlight 中完全删除 - 所以意图就在那里。据推测,对于常规.NET 来说,现有的旧代码太多了,这些代码ArrayList
已经过时了,特别是因为很多人在运行时都会遇到警告即错误。
你不应该在没有充分理由的情况下在新代码中使用它。
它本身并不是“过时的”。作为 80 世纪70 年代 早期的 90 年代汽车,它已经“过时”了。如果我必须在 aList<Object>
和 an之间进行选择,ArrayList
我会使用 ArrayList 的可能性非常小……算了吧……它没有实现IEnumerable<Object>
,所以要使用 Linq,我必须使用OfType<Object>()
.
举个例子:
var aaa = new ArrayList();
var aaaa = aaa.OfType<object>().Where(p => p != null);
var bbb = new List<object>;
var bbbb = bbb.Where(p => p != null);
终于有人赞成我的回答,所以我会添加一些东西:-)
如果您问“您会使用任何非通用集合”,我的回答会有所不同。Hashtable有一个有趣的属性:
Hashtable 是线程安全的,可供多个读取线程和单个写入线程使用。当只有一个线程执行写入(更新)操作时,多线程使用是线程安全的,如果写入器序列化到哈希表,则允许无锁读取。
所以有些地方 aHashtable
应该比 alock + Dictionary
或 a更好ConcurrentDictionary
(但你必须对其进行基准测试)