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