Je suis tombé sur cette déclaration:
"Lors de l'utilisation de foreach sur une liste d'objets, l'instance d'objet itéré n'est pas éditable, mais les propriétés de l'objet are éditable"
Quelqu'un pourrait-il démontrer ce qui précède avec un exemple simple, s'il vous plaît?
Permettez-moi de reformuler (comme j'ai trouvé la déclaration en deux versions), cette déclaration est peut-être plus claire:
"Lors de l'utilisation de foreach sur une liste d'éléments, la variable d'itération qui fournit l'élément est en lecture seule, mais les propriétés de l'élément sont modifiables"
foreach(var foo in foos)
{
foo = null; // WRONG, foo is not editable
foo.name = "John"; // RIGHT, foo properties are editable
}
Cela signifie que les éléments de la liste ne peuvent pas changer lors de l'itération, mais que leur contenu peut l'être.
cela modifiera la collection et empêchera le foreach de terminer:
foreach(var item in collection)
{
collection.Remove(item);
}
Cela modifiera un élément de la liste et n'empêchera pas le foreach de compléter:
foreach(var item in collection)
{
item.name = "Neil";
}
Oui
Foreach (n in list) if (n.something==true) list.Remove(n);
cela va échouer
vous ne pouvez pas supprimer un élément de la liste, contrairement à une boucle for
foreach var car in cars
{
//you can edit car.color here
//you cannot edit car
}
Vous n'êtes pas sûr d'avoir besoin d'un exemple pour cela. Vous allez enjamber chaque objet de la collection et vous pouvez faire ce que vous voulez pour chacun de ces objets, mais vous ne pouvez pas modifier la collection elle-même, par exemple. Insert, Remove, Clear, etc. Une telle tentative lèvera une exception.