sirve que para objectmodel generic collection colecciones .net collections

.net - que - system collections objectmodel



¿Cuál es la diferencia entre las propiedades Keys y AllKeys en NameValueCollection? (3)

De acuerdo con la documentación de MSDN, al usar AllKeys, es O (n) recuperar todos los valores, mientras que al usar Keys es O (1).

Keys

Recuperar el valor de esta propiedad es una operación O (1)

AllKeys

Este método es una operación O (n), donde n es Count.

Así que básicamente, parece que Keys tiene un mejor rendimiento.

System.Collections.Specialized.NameObjectCollectionBase tiene dos propiedades similares:

string[] AllKeys NameObjectCollectionBase.KeyCollection Keys

¿Proporcionan diferentes conjuntos de datos? ¿Cuándo querría usar uno sobre el otro?


sin embargo, existe el beneficio adicional de que usted podría realizar operaciones en su colección utilizando un foreach o una declaración LINQ en la devolución de AllKeys (). Como es una copia, no obtendrá errores al modificar una lista que se está enumerando actualmente.


AllKeys es una operación O(n) , mientras que Keys es O(1) . Esto se debe a que AllKeys copia las claves en una nueva matriz, mientras que Keys simplemente devuelve una referencia a la colección de claves privadas de NameValueCollection . Entonces, más allá de la diferencia en el rendimiento, la colección devuelta por Keys cambiará con la colección base, ya que es solo una referencia al original, mientras que AllKeys estará aislada de los cambios porque es una copia.

Este pequeño programa de prueba muestra la diferencia en el comportamiento:

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(); } }

La salida es:

Keys: 1 AllKeys: 0