OrderedDictionary
オーバーロードインデックス操作の整数でそのインデックスは、ようN
な位置にアイテムを取得するN
とインデックス作成中に、Object
そのオブジェクトにcorespondingアイテムを取得します。OrderedDictionary<int, string>
呼び出されたを作成し、myDict
アイテム(1、 "George")と(0、 "Fred")をこの順序で追加した場合、myDict[0]
"George"または "Fred" を返す必要がありますか?
このような問題は、キータイプにクラス制約を課すことで解決できた可能性があります。一方、ジェネリックコレクションの有用性の多くは、値の型を効率的に操作する能力に起因しています。キータイプにクラス制約を課すことは少しいように思えます。
クラスがCLS準拠である必要はなく、単にvb.netで動作する必要がある場合、名前付きインデックス付きプロパティを使用するのが賢明な設計であった可能性があります。したがって、上記の例でmyDict.ByKey[0]
は、「Fred」が生成され、myDict.BySequence[0]
「George」が生成されます。残念ながら、C#のような言語は、名前付きインデックス付きプロパティをサポートしていません。1でも、このような特性をすることなく、上記の構文を使用することができるように適当に組みあわせた何かを持っている可能性がありますが、不幸な決定は、同様の構造の分野ラップするPoint
とRectangle
のためにという意味をmyDict.ByKey[0] = "Wally"
仕事に、myDict.ByKey
新しいクラスのオブジェクトを返す必要があります。構造体はより効率的ですが、コンパイラーは、読み取り専用構造体への書き込みのように見えるものを拒否します(プロパティは、返される構造体を変更しませんが、ByKey
、代わりに参照を保持するコレクションを変更します)。
個人的には、挿入順序を追跡するように指定された辞書風のオブジェクトがあればいいと思います。また、特定のキーに関連付けられたキーを簡単に返すことができる辞書風のオブジェクトが必要です(たとえば、大文字と小文字を区別しない辞書があり、「GEORGE」というキーを持つレコードを追加した場合、KeyValuePair
列挙で返されるすべてのオブジェクトを検索することなく、「George」に関連付けられているキーを辞書に問い合わせることができます。
SortedDictionary<TKey, TValue>
:msdn.microsoft.com/en-us/library/f7fta44c.aspx