为什么';t C#.NET分类列表<;T1、T2>;你有ElementAt吗?

为什么';t C#.NET分类列表<;T1、T2>;你有ElementAt吗?,c#,.net,sortedlist,C#,.net,Sortedlist,在文档中,它明确指出“ElementAt”是SortedList成员上的扩展方法。好吧,我有一个,于是宣布: private SortedList<int, ChainLink> linksByLevel = new SortedList<int, ChainLink>(); 编译器会抛出非常有用的消息: 错误1“System.Collections.Generic.SortedList”不包含“ElementAt”的定义,并且没有扩展方法“ElementAt”接受类型

在文档中,它明确指出“ElementAt”是
SortedList
成员上的扩展方法。好吧,我有一个,于是宣布:

private SortedList<int, ChainLink> linksByLevel = new SortedList<int, ChainLink>();
编译器会抛出非常有用的消息:

错误1“System.Collections.Generic.SortedList”不包含“ElementAt”的定义,并且没有扩展方法“ElementAt”接受类型为“
System.Collections.Generic.SortedList”的第一个参数。

我对微软的文档和我的编译器缺乏一致性感到非常失望,我很想抱怨
SortedList
SortedList
的API之间的不一致,但我怀疑这会给我的问题增加多少价值。相信我,这很令人沮丧:-\

你添加了吗

using System.Linq;
在你档案的顶端


W.R.T.文档不一致,如果您查看SortedList文档并单击ElementAt,您将在页面顶部清楚地看到需要包含System.Linq。

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

using System.Linq;
在实际使用扩展方法之前,需要指定正在使用包含扩展方法的命名空间。因此,正如错误所解释的,您缺少一个使用-指令的

如果您确实知道该方法是一个扩展方法,但不知道它位于哪个命名空间中,那么您可能需要在线搜索以找到它。默认情况下,Visual Studio 2012无法为您解决此问题。您正在讨论的扩展方法位于System.Core.dll的
System.Linq
命名空间中


在Visual Studio中,创建新类文件时,将在顶部自动插入使用System.Linq的
。包含用于处理各种集合(包括列表、词典和数组)的所有属性。

SortedList
SortedList
是非常不同的属性

旧的SortedList在封面下使用一个数组,因此它可以提供一个高效的索引器


请注意,当您使用扩展方法
ElementAt()
时,它可能会执行“表扫描”,不要将其用于时间关键的事情

是否缺少对System.Linq的引用?是否使用System.Linq添加了
到您的代码文件?您是否已将Resharper添加到Visual Studio?嗯。再竖琴?虽然它很有用,但它与此问题有什么关系?Resharper会自动建议添加对命名空间
System.Linq的引用没有必要。显然,海报是新的扩展方法,即使他读了也不理解。RTFM只是没有帮助。是的,你是对的。不意味着报复。更正。但我觉得原始帖子中略带狂躁的性质是错误的。狂躁的性质实际上是因为我是RTFM,唯一提到名称空间的地方是扩展方法文档顶部的一个小链接(没有基本信息的地方,对不对?)。当我点击标题为“SortedList Members”的链接时,我希望这些成员位于同一名称空间中。在SortedList文档中,我找不到System.Linq的引用。但现在我知道得更清楚了——微软没有说“这些东西来自这里,然后单击以了解如何使用它。”而是…“这里有一些东西”,让我自己去弄清楚从哪里得到它。(另外,我已经对两个同名类之间明显的不一致感到沮丧。我有点讨厌这种情况。)+1回答得好。但我不得不挑剔。using指令不是“导入”,也不会发生“导入”。using指令是一种别名机制。诚然,扩展方法有点奇怪,因为如果它们的包含名称空间没有别名,它们根本就不存在。好吧,我同意你的意见,所以我对它进行了调整。@Tergiver,最糟糕的是,在引用扩展方法的文档中(参见我的链接),没有提到System.Linq。当我阅读一份名为“SortedList Members”的文件时,我希望他们引用我可以创建新的SortedList或使用所述SortedList的任何地方都可用的东西。
using System.Linq;