为什么有两种排序列表



>我有一个快速的应用程序,我想在其中使用排序列表。 没有用这么多,我做了一些研究,以确保我知道我在做什么,并发现显然有两个版本。 还是有一个具有附加功能的排序列表? 你会发现一个版本是System.Collections,另一个版本在System.Collections.Generic中。

System.Collections.SortedList slist1 = new SortedList();
System.Collections.Generic.SortedList<string, object> slist2 = new SortedList<string, object>();

它们在许多方面有所不同。 首先,slist1 有一个方法 SetByIndex,而 slist2 没有。

那么,为什么有两个版本的排序列表呢? 如何更新泛型排序列表中的对象值?

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

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

泛型

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

  • System.Collections.SortedList让人回想起 .NET 1.1
  • System.Collections.Generic.SortedList<..> 已在 .NET 2.0 中添加
System.Collections.SortedList

旧,它来自.NET 1.1,在支持的泛型之前。 System.Collections.Generic.SortedList<TKey, TValue>随 .NET 2.0 一起引入的,通常应改用。

将它们视为等同于System.Collections.ArrayListSystem.Collections.Generic.List<TValue>

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

slist2["SomeKeyString"] = newValue;
或者,如果要

按数字索引查找,请使用 Keys 属性获取键

slist2[slist2.Keys[2]] = newValue;

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


最后一点,SortedList<Tkey,TValue>实际上只有在您要枚举foreach中的列表并需要维护顺序时才有用,如果foreach中的顺序无关紧要,请改用Dictionary<TKey, TValue>,您将获得更快的插入和查找。

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

更新泛型SortedList中的对象的值

myGenericSortedList["key"] = "value";

最新更新