Meilleur auteur de réponses
Rendre une List<> ReadOnly

Question
-
Bonjour
J'ai une liste déclarée dans une classe de la façon suivante.
public static readonly List<ToponymeGeoDb> ListeToponymesGeoDb = new List<ToponymeGeoDb>();
Cette liste est chargée à partir d'une base Access.
Quelque part dans mon programme, sans que j'ai réussi à savoir où, cette liste est modifiée contre mon souhait.
1) Est-il possible de créer un évenement qui m'indique si l'un des éléments de la liste est modifié?
2) Sinon, comment faire pour empêcher sa modification.
Merci
Bernard
Bernard Bouree
Réponses
-
Oui.
En fait ce qu'il faut savoir c'est que roDinosaures est une bien une liste en lecture seule.
C'est un wrapper de la liste dinosaurs grâce à cette ligne de code :
IList<string> roDinosaurs = dinosaurs.AsReadOnly();
Attention, si la liste dinosaurs est modifiée, la modification s'effectuera également sur la liste roDinosaures.
Du coup, ce que vous devez faire c'est d'utiliser dans votre programme la liste roDinosaures une fois que la liste dinosaurs contient toutes ses valeurs.
J'espère que j'ai bien répondu à votre question.
Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post
Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi
Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;
- Marqué comme réponse BernardBouree jeudi 31 août 2017 16:45
Toutes les réponses
-
Bonjour Bernard,
Voici les réponses à vos questions :
1) Est-il possible de créer un évenement qui m'indique si l'un des éléments de la liste est modifié?
==> Oui, vous trouverez la réponse dans ce lien : https://stackoverflow.com/questions/24925037/how-can-i-detect-if-liststring-was-changed-and-what-is-the-last-item-that-wa/24925133
2) Sinon, comment faire pour empêcher sa modification.
==> En utilisant la méthode AsReadOnly().
List<string> List2 = new List<string> { "D", "E", "F" }; List2.AsReadOnly();
J'espère que j'ai bien répondu à votre question.
Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post
Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi
Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;
- Modifié Nourdine MHOUMADI jeudi 31 août 2017 09:02
-
Bonjour Nourdine
Merci pour votre réponse.
Je suis aller consulter MSDN et je suis perplexe. Dans l'exemple présenté l'élément 2 est modifié alors que je m'attendais à ce que cela ne puisse se faire!
List<string> dinosaurs = new List<string>(4); Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity); dinosaurs.Add("Tyrannosaurus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Mamenchisaurus"); dinosaurs.Add("Deinonychus"); Console.WriteLine(); foreach(string s in dinosaurs) { Console.WriteLine(s); } Console.WriteLine("\nIList<string> roDinosaurs = dinosaurs.AsReadOnly()"); IList<string> roDinosaurs = dinosaurs.AsReadOnly(); Console.WriteLine("\nElements in the read-only IList:"); foreach(string dinosaur in roDinosaurs) { Console.WriteLine(dinosaur); } Console.WriteLine("\ndinosaurs[2] = \"Coelophysis\""); dinosaurs[2] = "Coelophysis"; Console.WriteLine("\nElements in the read-only IList:"); foreach(string dinosaur in roDinosaurs) { Console.WriteLine(dinosaur); }
Bernard
Bernard Bouree
-
-
Oui.
En fait ce qu'il faut savoir c'est que roDinosaures est une bien une liste en lecture seule.
C'est un wrapper de la liste dinosaurs grâce à cette ligne de code :
IList<string> roDinosaurs = dinosaurs.AsReadOnly();
Attention, si la liste dinosaurs est modifiée, la modification s'effectuera également sur la liste roDinosaures.
Du coup, ce que vous devez faire c'est d'utiliser dans votre programme la liste roDinosaures une fois que la liste dinosaurs contient toutes ses valeurs.
J'espère que j'ai bien répondu à votre question.
Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post
Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi
Download my NEW FREE application MCP PREPARATION in the Windows 10 Store for preparing your Microsoft Certification or test your skills in Microsoft Technologies;
- Marqué comme réponse BernardBouree jeudi 31 août 2017 16:45
-
Bonjour Nourdine
Merci pour cette clarification, j'étais en train de m'arracher les cheveux car je pensais que les deux listes étaient indépendantes.
J'avais donc fait un Clear() de la première et ne comprenait pas pourquoi la ReadOnly se vidait.
Merci pour votre aide
Bernard
Bernard Bouree