我在一个类(我们称之为MyClass)中发现了一些非常讨厌的代码,它广泛使用了 List of T.Add/Remove方法。此外,同一个类将该集合公开为具有 T 类型 IList 的属性,因此更改类型将涉及一些重构。
此外,该 MyClass 集合用作事件侦听器对象的容器,因此客户端代码只需订阅(将自身添加到集合中)和取消订阅(将自身从集合中删除)。顺序无关紧要,无论是列表的开始/中间/结束。
为了提高性能,我想替换内部实现细节,将 List of T 替换为.... 不知道是什么。我尝试了 T 的 LinkedList,但它没有实现 T 的 IList。我在 MSDN 上查看了 T 的 IList,但没有实现 IList 的类列表,因此我可以比较文档。
另一件事是我试图将 T 的 IList 更改为 T 的 ICollection,这可能是一个解决方案(因为MyClass的客户端代码使用 Add/Remove 方法,因此不需要重构)但发生了有趣的事情:
LinkedList<string> list = new LinkedList<string>();
list.Add("test");
由于出现错误,此代码无法编译:
“System.Collections.Generic.LinkedList”不包含“Add”的定义,也没有扩展方法“Add”
但是当我将其更改为:
ICollection<string> list = new LinkedList<string>();
list.Add("test");
然后我工作了。你能解释一下为什么第一个示例没有编译+告诉.NET Framework 中 T 的 IList 在添加/删除项目方面的最快实现是什么?
谢谢。