【发布时间】:2012-08-09 18:44:13
【问题描述】:
我在一个广泛使用T.Add/Remove 方法的类(我们称之为MyClass)中发现了一些非常讨厌的代码。此外,同一个类将该集合公开为具有 T 类型 IList 的属性,因此更改类型将涉及一些重构。
此外,MyClass 集合用作事件侦听器对象的容器,因此客户端代码只需订阅(将自身添加到集合中)和取消订阅(将自身从集合中删除)。顺序无关紧要,无论是列表的开始/中间/结束。
为了提高性能,我想替换内部实现细节,将 List of T 替换为.... 不知道是什么。我尝试了 T 的 LinkedList,但它没有实现 T 的 IList。我查看了IList of T at MSDN,但没有实现 IList 的类列表,因此我可以比较文档。
另一件事是我试图将 T 的 IList 更改为 T 的 ICollection,这可能是一个解决方案(因为 MyClass 的客户端代码使用添加/删除方法,因此无需重构)但有趣的事情发生了:
LinkedList<string> list = new LinkedList<string>();
list.Add("test");
此代码无法编译,因为我收到错误:
'System.Collections.Generic.LinkedList' 不包含 “添加”的定义,没有扩展方法“添加”
但是当我把它改成:
ICollection<string> list = new LinkedList<string>();
list.Add("test");
然后我工作了。您能否解释一下为什么第一个示例没有编译 + 说明 .NET Framework 中 T 的 IList 在添加/删除项目方面的最快实现是什么?
谢谢。
【问题讨论】:
-
您试图提高性能的事实似乎与问题的其余部分无关......请随时从标题中删除。
-
其实关于 MyClass 和性能的故事是一个支线剧情。不过,我的问题是“添加/删除收藏品的最快方法是什么”
标签: c# .net c#-4.0 collections