4

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 ディレクティブまたはアセンブリ参照がありませんか?)

SortedListMicrosoft のドキュメントとコンパイラの一貫性の欠如にかなり不満を感じており、 と の API 間の不一致について怒鳴りたいと思っていますがSortedList<T1, T2>、それが私の質問に大きな価値をもたらすとは思えません。信じてください、イライラします :-\

4

3 に答える 3

14

コード ファイルの先頭にインポートを追加してみてください。

using System.Linq;

拡張メソッドを実際に使用する前に、拡張メソッドを含む名前空間を使用していることを指定する必要があります。したがって、エラーが説明したように、-ディレクティブがありませんでしたusing

メソッドが拡張メソッドであることはわかっていても、それがどの名前空間に存在するかがわからない場合は、おそらくオンラインで検索して見つける必要があります。デフォルトでは、Visual Studio 2012 はそれを解決できません。あなたが話している拡張メソッドは、System.Core.dllEnumerable.ElementAtの名前空間にあります。System.Linq

Visual Studio では、新しいクラス ファイルを作成するusing System.Linqと、先頭に自動的に挿入されます。その名前空間には、すべての種類のコレクション (リスト、辞書、配列を含む) を操作するためのすべてのLINQ 拡張メソッドが含まれています。

于 2012-08-02T19:08:25.893 に答える
4

追加しましたか

using System.Linq;

ファイルの先頭に?

WRT ドキュメントの矛盾。SortedList ドキュメントを見て ElementAt をクリックすると、ページの上部に System.Linq を含める必要があることがはっきりとわかります。

于 2012-08-02T19:08:20.290 に答える
2

SortedListSortedList<K,V>は非常に異なる獣です。

古いSortedListは内部で配列を使用するため、効率的なインデクサーを提供できます。

拡張メソッドを使用するElementAt()と、おそらく「テーブルスキャン」が実行されることに注意してください。タイムクリティカルな目的には使用しないでください。

于 2012-08-02T19:32:36.210 に答える