为什么不C#.NET排序列表 居然有ElementAt的?(Why doesn't C

2019-09-20 17:29发布

3.5 Collections.Generic.SortedList .NET文档

在本文档中,说白指出“ElementAt的”是对一个扩展方法SortedList的成员。 好吧,我有一个,正是如此宣称:

private SortedList<int, ChainLink> linksByLevel = new SortedList<int, ChainLink>();

我试图让最后一个元素:

ChainLink lastLink = linksByLevel.ElementAt(linksByLevel.Count - 1);

编译器会引发大量的有用信息:

错误1“System.Collections.Generic.SortedList”不包含关于“的ElementAt”的定义和没有扩展方法“的ElementAt”接受型的第一参数“ System.Collections.Generic.SortedList<int,ChainLink>'可以发现(是否缺少using指令或程序集引用?)

我得到由微软的文档,我的编译器在缺乏连贯性非常沮丧,很想咆哮有关的API之间的不一致SortedListSortedList<T1, T2>但我怀疑这会增加多少价值,我的问题。 只是相信我,这是令人沮丧: - \

Answer 1:

尝试添加导入到你的代码文件的顶部:

using System.Linq;

您需要指定您使用包含扩展方法,你可以实际使用的扩展方法之前的命名空间。 所以,作为错误解释,你缺少一个using -directive。

如果您知道该方法是一个扩展方法,但你不知道在哪个命名它生活,那么你可能需要在网上搜索找到它。 默认的Visual Studio 2012能不能解决它。 你所谈论的扩展方法是Enumerable.ElementAtSystem.Linq System.Core.dll的命名空间。

在Visual Studio中,当你创建一个新的类文件,你就必须using System.Linq上方自动插入。 该命名空间包含了所有的LINQ扩展方法与所有类型的集合(包括列表,字典和数组)工作。



Answer 2:

你加

using System.Linq;

在你的文件的顶部?

WRT文件不一致,如果你看一下SortedList的文档,并通过点击ElementAt的,你会清楚的,你需要包括System.Linq的页面顶部看到。



Answer 3:

SortedListSortedList<K,V>是非常不同的野兽。

较旧的排序列表底层使用阵列,并且因此它可以提供一种有效的索引器。

要注意的是,当你使用扩展方法ElementAt()它可能会做一个“表扫描”,不使用它的东西时间关键。



文章来源: Why doesn't C# .NET SortedList actually have ElementAt?