99

重複の可能性:
IDictionary <string、string>またはNameValueCollection

NameValueCollectionの代わりにDictionary<string、string>を使用する必要がある理由は何ですか?

(C#/ .NET Frameworkの場合)

オプション1、NameValueCollectionの使用:

//enter values:
NameValueCollection nvc = new NameValueCollection()
{
  {"key1", "value1"},
  {"key2", "value2"},
  {"key3", "value3"}
};

// retrieve values:
foreach(string key in nvc.AllKeys)
{
  string value = nvc[key];
  // do something
}

オプション2、Dictionary <string、string>..を使用

//enter values:
Dictionary<string, string> dict = new Dictionary<string, string>()
{
  {"key1", "value1"},
  {"key2", "value2"},
  {"key3", "value3"}
};

// retrieve values:
foreach (KeyValuePair<string, string> kvp in dict)
{
  string key = kvp.Key;
  string val = kvp.Value;
  // do something
}

これらのユースケースでは、一方を他方に対して使用する利点はありますか?パフォーマンス、メモリ使用量、ソート順などに違いはありますか?

4

3 に答える 3

130

それらは意味的に同一ではありません。はNameValueCollection重複するキーを持つことができますが、Dictionaryできません。

個人的には、重複するキーがない場合は、に固執しますDictionary。それはより現代的で、クエリIEnumerable<>と簡単に混ざり合うことができる使用法です。メソッドを使用しLinqて作成することもできます。DictionaryLinq ToDictionary()

于 2010-06-08T20:41:34.337 に答える
19

NameValueCollectionstring型付けされていますがDictionary、ジェネリックスを利用して型の変化を可能にします。ジェネリック医薬品の利点を参照してください。

于 2010-06-08T20:55:35.283 に答える
10

Dictionaryはるかに高速になります。NameValueCollection重複キーを許可します。これは、特定の状況では悪い場合もあれば、他の状況では望ましい場合もあります。 Dictionary重複キーは許可されません。

差出人:http ://msdn.microsoft.com/en-us/library/xfhwa508.aspx

Dictionary<(Of <(TKey, TValue>)>) ジェネリッククラスは、キーのセットから値のセットへのマッピングを提供します。ディクショナリへの各追加は、値とそれに関連付けられたキーで構成されます。 クラスはハッシュテーブルとして実装されているO(1)ため、 キーを使用して値を取得するのは非常に高速で、に近いです。Dictionary<(Of <(TKey, TValue>)>)

于 2010-06-08T20:59:22.147 に答える