NameValueCollection, classe
Mise à jour : novembre 2007
Espace de noms : System.Collections.SpecializedAssembly : System (dans System.dll)
Cette collection se base sur la classe NameObjectCollectionBase. Cependant, contrairement à NameObjectCollectionBase, elle stocke plusieurs valeurs de chaîne sous une même clé.
Cette classe peut être utilisée pour les en-têtes, les chaînes de requête et les données de formulaire.
Chaque élément est une paire clé/valeur.
La capacité de NameValueCollection correspond au nombre d'éléments que peut contenir NameValueCollection. Lorsque des éléments sont ajoutés à NameValueCollection, la capacité augmente automatiquement par réallocation.
Le fournisseur de code de hachage fournit les codes de hachage des clés dans NameValueCollection. Le fournisseur de code de hachage par défaut est CaseInsensitiveHashCodeProvider.
Le comparateur détermine si deux clés sont égales. Le comparateur par défaut est CaseInsensitiveComparer.
Dans la version 1.0 du .NET Framework, cette classe utilise des comparaisons de chaînes dépendantes de la culture. Toutefois, dans la version 1.1 et les versions ultérieures du .NET Framework, elle utilise CultureInfo.InvariantCulture pour les comparaisons de chaînes. Pour plus d'informations sur l'impact de la culture sur les comparaisons et le tri, consultez Comparaison et tri des données pour une culture spécifiqueComparaison et tri des données pour une culture spécifique et Exécution d'opérations de chaînes indépendantes de la culture.
null est autorisée comme clé ou comme valeur.
Attention :
|
|---|
|
La méthode Get ne distingue pas null qui est retourné parce que la clé spécifiée est introuvable et null, retourné parce que la valeur associée à la clé est null. |
using System; using System.Collections; using System.Collections.Specialized; public class SamplesNameValueCollection { public static void Main() { // Creates and initializes a new NameValueCollection. NameValueCollection myCol = new NameValueCollection(); myCol.Add( "red", "rojo" ); myCol.Add( "green", "verde" ); myCol.Add( "blue", "azul" ); myCol.Add( "red", "rouge" ); // Displays the values in the NameValueCollection in two different ways. Console.WriteLine( "Displays the elements using the AllKeys property and the Item (indexer) property:" ); PrintKeysAndValues( myCol ); Console.WriteLine( "Displays the elements using GetKey and Get:" ); PrintKeysAndValues2( myCol ); // Gets a value either by index or by key. Console.WriteLine( "Index 1 contains the value {0}.", myCol[1] ); Console.WriteLine( "Key \"red\" has the value {0}.", myCol["red"] ); Console.WriteLine(); // Copies the values to a string array and displays the string array. String[] myStrArr = new String[myCol.Count]; myCol.CopyTo( myStrArr, 0 ); Console.WriteLine( "The string array contains:" ); foreach ( String s in myStrArr ) Console.WriteLine( " {0}", s ); Console.WriteLine(); // Searches for a key and deletes it. myCol.Remove( "green" ); Console.WriteLine( "The collection contains the following elements after removing \"green\":" ); PrintKeysAndValues( myCol ); // Clears the entire collection. myCol.Clear(); Console.WriteLine( "The collection contains the following elements after it is cleared:" ); PrintKeysAndValues( myCol ); } public static void PrintKeysAndValues( NameValueCollection myCol ) { IEnumerator myEnumerator = myCol.GetEnumerator(); Console.WriteLine( " KEY VALUE" ); foreach ( String s in myCol.AllKeys ) Console.WriteLine( " {0,-10} {1}", s, myCol[s] ); Console.WriteLine(); } public static void PrintKeysAndValues2( NameValueCollection myCol ) { Console.WriteLine( " [INDEX] KEY VALUE" ); for ( int i = 0; i < myCol.Count; i++ ) Console.WriteLine( " [{0}] {1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i) ); Console.WriteLine(); } } /* This code produces the following output. Displays the elements using the AllKeys property and the Item (indexer) property: KEY VALUE red rojo,rouge green verde blue azul Displays the elements using GetKey and Get: [INDEX] KEY VALUE [0] red rojo,rouge [1] green verde [2] blue azul Index 1 contains the value verde. Key "red" has the value rojo,rouge. The string array contains: rojo,rouge verde azul The collection contains the following elements after removing "green": KEY VALUE red rojo,rouge blue azul The collection contains the following elements after it is cleared: KEY VALUE */
import System.*;
import System.Collections.*;
import System.Collections.Specialized.*;
public class SamplesNameValueCollection
{
public static void main(String[] args)
{
// Creates and initializes a new NameValueCollection.
NameValueCollection myCol = new NameValueCollection();
myCol.Add("red", "rojo");
myCol.Add("green", "verde");
myCol.Add("blue", "azul");
myCol.Add("red", "rouge");
// Displays the values in the NameValueCollection in two different ways.
Console.WriteLine("Displays the elements using the AllKeys property"
+ " and the Item (indexer) property:");
PrintKeysAndValues(myCol);
Console.WriteLine("Displays the elements using GetKey and Get:");
PrintKeysAndValues2(myCol);
// Gets a value either by index or by key.
Console.WriteLine("Index 1 contains the value {0}.", myCol.get_Item(1));
Console.WriteLine("Key \"red\" has the value {0}.",
myCol.get_Item("red"));
Console.WriteLine();
// Copies the values to a string array and displays the string array.
String myStrArr[] = new String[myCol.get_Count()];
myCol.CopyTo(myStrArr, 0);
Console.WriteLine("The string array contains:");
for (int iCtr = 0; iCtr < myStrArr.get_Length(); iCtr++) {
String s = myStrArr[iCtr];
Console.WriteLine(" {0}", s);
}
Console.WriteLine();
// Searches for a key and deletes it.
myCol.Remove("green");
Console.WriteLine("The collection contains the following elements "
+ "after removing \"green\":");
PrintKeysAndValues(myCol);
// Clears the entire collection.
myCol.Clear();
Console.WriteLine("The collection contains the following elements "
+ "after it is cleared:");
PrintKeysAndValues(myCol);
} //main
public static void PrintKeysAndValues(NameValueCollection myCol)
{
IEnumerator myEnumerator = myCol.GetEnumerator();
Console.WriteLine(" KEY VALUE");
for (int iCtr = 0; iCtr < myCol.get_Count(); iCtr++) {
String s = myCol.get_AllKeys()[iCtr];
Console.WriteLine(" {0,-10} {1}", s, myCol.get_Item(s));
}
Console.WriteLine();
} //PrintKeysAndValues
public static void PrintKeysAndValues2(NameValueCollection myCol)
{
Console.WriteLine(" [INDEX] KEY VALUE");
for (int i = 0; i < myCol.get_Count(); i++) {
Console.WriteLine(" [{0}] {1,-10} {2}",
System.Convert.ToString(i), System.Convert.ToString(
myCol.GetKey(i)), System.Convert.ToString(myCol.Get(i)));
}
Console.WriteLine();
} //PrintKeysAndValues2
} //SamplesNameValueCollection
/*
This code produces the following output.
Displays the elements using the AllKeys property and the Item
(indexer) property:
KEY VALUE
red rojo,rouge
green verde
blue azul
Displays the elements using GetKey and Get:
[INDEX] KEY VALUE
[0] red rojo,rouge
[1] green verde
[2] blue azul
Index 1 contains the value verde.
Key "red" has the value rojo,rouge.
The string array contains:
rojo,rouge
verde
azul
The collection contains the following elements after removing "green":
KEY VALUE
red rojo,rouge
blue azul
The collection contains the following elements after it is cleared:
KEY VALUE
*/
System.Collections.Specialized.NameObjectCollectionBase
System.Collections.Specialized.NameValueCollection
System.Net.WebHeaderCollection
System.Web.HttpClientCertificate
Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cette implémentation ne fournit pas de wrapper synchronisé (thread-safe) pour NameValueCollection, mais des classes dérivées peuvent créer leurs propres versions synchronisées de NameValueCollection à l'aide de la propriété SyncRoot de la classe NameObjectCollectionBase.
L'énumération d'une collection n'est intrinsèquement pas une procédure thread-safe. Même lorsqu'une collection est synchronisée, les autres threads peuvent toujours modifier la collection, ce qui entraîne la levée d'une exception par l'énumérateur. Pour garantir la sécurité des threads au cours de l'énumération, vous pouvez soit verrouiller la collection pendant l'ensemble de l'énumération, soit intercepter les exceptions résultant des modifications apportées par les autres threads.
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile pour Smartphone, Windows Mobile pour Pocket PC, Xbox 360
Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Attention :