2016-07-11 22 views
2

私はSortedListを使いたいという素早いアプリケーションを持っています。これをあまり使わなかったので、私が何をやっているのかを知るための少しの調査を行い、明らかに2つのバージョンがあることを発見しました。それとも、追加の機能を持つSortedListが1つありますか?あなたはSystem.CollectionsとSystem.Collections.Genericのもう一つのバージョンがあることがわかります。SortedListには2種類の理由がありますか?

System.Collections.SortedList slist1 = new SortedList(); 
System.Collections.Generic.SortedList<string, object> slist2 = new SortedList<string, object>(); 

これらは多くの点で異なります。一つ目は、slist1にはSetByIndexというメソッドがあり、slist2はそうではありません。

なぜ、SortedListには2つのバージョンがありますか?また、Generic SortedListのオブジェクトの値をどのように更新しますか?

+0

これらは一般的な非ジェネリックバージョンであるジェネリックSortedListにオブジェクトの値を更新します。非ジェネリックバージョンは、ジェネリックがフレームワークで導入される前の古いバージョンであり、主に下位互換性の原因となっています。 – Rahul

+0

ジェネリックでないバージョンは、C#のジェネリックの導入に先立っています。 –

+0

@ラフル、私はそれが私が言ったことだと思う、はい。 – Cyberherbalist

答えて

2

System.Collections.SortedListが古いを添加した.NET 1.1

  • System.Collections.Generic.SortedList<..>に思い起こさせます。 System.Collections.Generic.SortedList<TKey, TValue>は.NET 2.0で導入されました。通常は代わりに使用する必要があります。

    System.Collections.ArrayListSystem.Collections.Generic.List<TValue>と同等であると考えてください。この意志:あなたはthe indexer

    slist2["SomeKeyString"] = newValue; 
    

    それとも、数値インデックスによって

    slist2[slist2.Keys[2]] = newValue; 
    

    ノートを検索したい場合は、キーを取得するためにKeysプロパティを使用を使用する必要がある一般的なバージョンを更新するには

    TValue this[TKey index]は検索を行うためにバイナリ検索を行う必要があるため、SetByIndexは直接配列アクセスを行うことができるため、非汎用バージョンよりも性能が劣る可能性があります

    での順序が問題かわりDictionary<TKey, TValue>を使用していない場合は、foreachでリストを列挙することになるだろうし、維持するために必要がある場合

    最後の注意点、SortedList<Tkey,TValue>は本当にのみ有用であり、より速い挿入とルックアップが得られます。

  • +0

    そうですね、私はSortedListを使いたいと思っています。アイテムを整理しておく必要がありました。 – Cyberherbalist

    +1

    @IvanStoevは、私が 'SortedList'をどのくらい頻繁に使用しているかを示しています。回答の一部を削除しました –

    +0

    @IvanStoevは私の答えを作業用バージョンに更新しました。 –

    5

    非ジェネリッククラス - System.Collections.SortedList - ジェネリックスが追加される前の、.NETの非常に初期の段階で作成されたクラスの1つです。

    これは、少なくともそれらが一般的な選択肢を持つ場合、その名前空間内のクラスのすべてではないにしても、ほとんどのソースです。

    汎用バージョンは、ジェネリックが追加されたとき、後で追加された後、追加された後に追加されました。

      System.Collections.SortedList
    • それはバックサポートジェネリック前に、.NET 1.1である、.NET 2.0
    2

    System.Collections.SortedListは、汎用クラスが存在する前に、.NETのバージョン1.1に戻っています。レガシーコードは、より新しいフレームワークバージョンを使用して再コンパイルされる可能性があるため、そこに存在する必要があります。

    myGenericSortedList["key"] = "value"; 
    
    関連する問題