我有一个快速应用程序,我想在其中使用 SortedList。没有使用这么多,我做了一些研究以确保我知道我在做什么,并发现显然有两个版本。或者是否有一个带有附加功能的 SortedList?您会发现一个版本是 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 没有。

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

最佳答案

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

将它们视为 System.Collections.ArrayListSystem.Collections.Generic.List<TValue> 的等效项。

要更新通用版本,您需要使用 the indexer

slist2["SomeKeyString"] = newValue;

或者,如果您想通过数字索引查找,则使用 Keys 属性来获取 key
slist2[slist2.Keys[2]] = newValue;

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

最后要注意的是,SortedList<Tkey,TValue> 仅在您要枚举 foreach 中的列表并需要维护订单时才有用,如果 foreach 中的顺序无关紧要,请改用 Dictionary<TKey, TValue> 并且您将获得更快的插入和查找。

关于c# - 为什么有两种SortedList?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38314533/

10-13 07:46