NameValueCollection. This C# type allows many values for one key. It is found in System.Collections Specialized, and it does not provide the best performance.
Other collections are likely to be faster than NameValueCollection. Unless you need to use NameValueCollection, you should consider Dictionary or List.
Example. We add 4 string key-value pairs to a NameValueCollection. The keys can occur more than once, but map to the same array of values. You can have one key pointing to two values.
Part 5 GetKey with an index to gets the key at that index. This method always receives an int, not a string.
Part 6 Get returns the value at that index. This method also receives an int (like GetKey).
using System;
using System.Collections.Specialized;
class Program
{
static void Main()
{
// Part 1: create new NameValueCollection.
var collection = new NameValueCollection();
collection.Add("cat", "orange");
collection.Add("dog", "brown");
collection.Add("dog", "white");
collection.Add("cat", "black");
// Part 2: loop over keys.
foreach (string key in collection.AllKeys)
{
Console.WriteLine(key);
}
// Part 3: get values.
Console.WriteLine(collection["cat"]);
Console.WriteLine(collection["x"] == null);
// Part 4: use HasKeys.
Console.WriteLine(collection.HasKeys());
// Part 5: use GetKey.
Console.WriteLine(collection.GetKey(0));
// Part 6: get the first value.
string value = collection.Get(0);
Console.WriteLine(value);
}
}cat
dog
orange,black
True
True
cat
orange,black
Benchmark. Does the NameValueCollection have competitive performance to the Dictionary? In some programs, we can use a NameValueCollection instead of a Dictionary.
Version 1 We access a value by passing a key to the NameValueCollection in this version.
Version 2 We use the Dictionary and access a value associated with a key. We use the same key as in the other version.
Result In 2024, NameValueCollection lookup speed on even a small collection is poor. Its performance is likely much worse in many situations.
#define VERSION1
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
class Program
{
public static void Main()
{
var collection = new NameValueCollection();
collection.Add("cat", "orange");
collection.Add("dog", "brown");
var dictionary = new Dictionary<string, string>();
dictionary.Add("cat", "orange");
dictionary.Add("dog", "brown");
const int _max = 10000000;
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
#if VERSION1
string value = collection["dog"];
#endif#if VERSION2
string value = dictionary["dog"];
#endif
}
s1.Stop();
Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) / _max).ToString("0.00 ns"));
}
}89.20 ns NameValueCollection
10.83 ns Dictionary
ASP.NET. The NameValueCollection is prevalent in ASP.NET, and it is used in appSettings, QueryString, and Headers collections. In many projects it is used with appSettings.
Summary. NameValueCollection is located in the System.Collections Specialized namespace. It allows you to associate one string key with multiple string values.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Feb 27, 2024 (rewrite).