Le code suivant parcourt une liste et récupère les valeurs, mais comment pourrais-je écrire une instruction similaire qui récupère les clés et les valeurs
foreach (string value in list.Values)
{
Console.WriteLine(value);
}
par exemple quelque chose comme ça
foreach (string value in list.Values)
{
Console.WriteLine(value);
Console.WriteLine(list.key);
}
le code pour la liste est:
SortedList<string, string> list = new SortedList<string, string>();
foreach (KeyValuePair<string, string> kvp in list)
{
Console.WriteLine(kvp.Value);
Console.WriteLine(kvp.Key);
}
De msdn :
GetEnumerator renvoie un énumérateur de type KeyValuePair<TKey, TValue>
qui effectue une itération via le SortedList<TKey, TValue>
.
Comme Jon a déclaré, vous pouvez utiliser le mot clé var
au lieu d'écrire le nom du type de la variable d'itération (le type sera déduit de l'utilisation):
foreach (var kvp in list)
{
Console.WriteLine(kvp.Value);
Console.WriteLine(kvp.Key);
}
Excuses ...
c'était un sujet incorrect (boucle entre les valeurs). Mon problème parcourait les paires de valeurs de clé, et pas seulement les valeurs . Laissera ceci ici s'il n'y a pas d'objections comme option possible pour obtenir des valeurs de la collection SortedList.
J'ai juste essayé de comprendre cette erreur également et ma solution consistait à utiliser le type DictionaryEntry
pour remplacer le type KeyValuePair
avec erreur . Trouvé dans la référence MS https://msdn.Microsoft.com/en -us/library/system.collections.dictionaryentry (v = vs.100) .aspx
Dans mon cas, le code créait une collection de types SortedList
et ni les types var
ni KeyValuePair
ne fonctionnaient (var
s'est égaré lors d'une tentative de lecture de la clé/valeur à partir de l'élément de la collection et le KeyValuePair
s'est égaré dans la définition de boucle initiale. Les deux avec "Specified cast is not valid"
)
Voici donc un exemple de code qui a fonctionné pour moi:
SortedList _dims = GetList("mysortedlist");
foreach (DictionaryEntry kvp in _dims)
{
Console.WriteLine(kvp.Key.ToString());
Console.WriteLine(kvp.Value.ToString());
}
HTH
Dave