AllKeys
is an O(n)
operation, while Keys
is O(1)
. This is because AllKeys
copies the keys into a new array, while Keys
just returns a reference to NameValueCollection
‘s private key collection. So beyond the difference in performance, the collection returned by Keys
will change with the base collection as it’s just a reference to the original, while AllKeys
will be insulated from the changes because it’s a copy.
This little test program shows the difference in behavior:
using System;
using System.Collections.Specialized;
static class Program
{
static void Main()
{
var collection = new NameValueCollection();
var keys = collection.Keys;
var allKeys = collection.AllKeys;
collection.Add("Name", "Value");
Console.WriteLine("Keys: " + keys.Count);
Console.WriteLine("AllKeys: " + allKeys.Length);
Console.ReadLine();
}
}
The output is:
Keys: 1
AllKeys: 0