首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么有两种SortedList?

为什么有两种SortedList?
EN

Stack Overflow用户
提问于 2016-07-11 19:17:56
回答 3查看 1.4K关注 0票数 3

我有一个快速的应用程序,我想在其中使用SortedList。由于没有这么多的使用,我做了一个小的研究,以确保我知道我在做什么,并逐渐发现显然有两个版本。还是有一个SortedList具有其他特性?您会发现一个版本是System.Collections,另一个版本是System.Collections.Generic。

代码语言:javascript
复制
System.Collections.SortedList slist1 = new SortedList();
System.Collections.Generic.SortedList<string, object> slist2 = new SortedList<string, object>();

他们在许多方面有不同之处。首先,slist1有一个slist2没有的方法SetByIndex。

那么,为什么有两个版本的SortedList?以及如何更新泛型SortedList中对象的值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-11 19:21:27

System.Collections.SortedList比较老,它来自.NET 1.1,在支持泛型之前。System.Collections.Generic.SortedList<TKey, TValue>是在.NET 2.0中引入的,通常应该使用它。

把它们看作是System.Collections.ArrayListSystem.Collections.Generic.List<TValue>的等价物。

要更新通用版本,需要使用索引器

代码语言:javascript
复制
slist2["SomeKeyString"] = newValue;

如果要通过数字索引查找,则使用Keys属性获取密钥。

代码语言:javascript
复制
slist2[slist2.Keys[2]] = newValue;

注意:这可能会带来比非通用版本更差的性能,因为TValue this[TKey index]需要执行二进制搜索才能进行查找,SetByIndex可以直接进行数组访问。

最后一个注意事项是,只有当您要枚举foreach中的列表并需要维护订单时,foreach才是真正有用的,如果foreach中的顺序并不重要,而是使用Dictionary<TKey, TValue>,那么您将得到更快的插入和查找。

票数 2
EN

Stack Overflow用户

发布于 2016-07-11 19:21:12

非泛型类System.Collections.SortedList是在添加泛型之前在.NET早期创建的类之一。

这是该命名空间中的大多数类(如果不是全部的话)的来源,至少如果它们有泛型的替代品的话。

泛型版本是在以后添加泛型时或之后添加的,现在通常是首选的数据结构。

  • System.Collections.SortedList回到.NET 1.1
  • System.Collections.Generic.SortedList<..>是在.NET 2.0中添加的
票数 5
EN

Stack Overflow用户

发布于 2016-07-11 19:22:46

System.Collections.SortedList可以追溯到.NET的1.1版,在出现泛型类之前。它仍然存在,因为遗留代码可能会使用更新的框架版本重新编译,因此需要在其中。

更新泛型SortedList中对象的值

代码语言:javascript
复制
myGenericSortedList["key"] = "value";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38314533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档