Comment supprimer tous les éléments d'un dictionnaire?
J'utilise le code suivant pour supprimer tous les éléments d'un dictionnaire:
internal static void RemoveAllSourceFiles()
{
foreach (byte key in taggings.Keys)
{
taggings.Remove(key);
}
}
Mais malheureusement, ce n'est pas de travail parce qu'un InvalidOperationException
est levée. Je sais que c'est parce que la collection est modifié lors de l'itération sur elle, mais comment puis-je changer cela?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Beaucoup plus simple (et plus efficace) approche:
et oui, l'erreur est parce que changer les données délibérément pauses itérateurs.
Essayez d'utiliser le Claire méthode à la place.
Mise à jour: Et comme Marc l'a souligné, vous ne pouvez pas continuer une itération sur une collection tout en vous de le modifier parce que l'itérateur est définitivement invalidé. Merci de lire la réponse à cette SORTE de question pour plus de détails.
Pourquoi ne l'énumération d'une collection de lancer une exception, mais, en boucle par le biais de ses éléments n'a pas d'
De dictionnaire.Claire?
À faire ce que vous voulez faire, vous allez avoir besoin de faire une itération sur les touches dans l'ordre inverse, de cette façon vous ne pas modifier le tableau dans l'ordre qu'il tente de revenir à vous.
Ou l'utilisation .Clear()
Comme l'a dit, l' .NET par défaut de l'agent recenseur ne prend pas en charge la collecte des changements lors de l'énumération. Dans votre cas, utilisez Claire.
Si vous voulez un meilleur contrôle sur la suppression, l'utilisation de linq:
Le ToArray() la méthode d'extension énumérer la requête LINQ, et d'instancier un tableau stockant les résultats. Ce tableau peut être en toute sécurité énumérées plus loin pour supprimer les éléments contenus dans le dictionnaire source.