Changer de collection dans foreach

Voici mon code:

foreach (OrderItem item in OrderInfo.order) { orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToSsortingng()).numericUpDown.Value = item.count; } 

Cela donne une exception.
Je sais que je ne peux pas changer la collection dans foreach
Comment puis-je changer ce code pour le faire fonctionner? Le meilleur de tous si ce serait le code LINQ.

exception dit que “La collection a été modifiée”. désolé ne peut pas fournir un vrai message d’exception parce que ce n’est pas en anglais

Désolé les gars. J’ai trouvé où la collection change. C’était à l’intérieur du gestionnaire * numericUpDown_ValueChanged *. de toute façon j’ai une réponse. Je vous remercie

Vous pouvez utiliser ToList() , comme ceci:

 foreach (OrderItem item in OrderInfo.order.ToList()) { orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToSsortingng()).numericUpDown.Value = item.count; } 

Ou utilisez normal pour loop:

 for (int i = 0 ; i < OrderInfo.order.Count; i++) { OrderItem item = OrderInfo.order[i]; orderItemViews.Single(i => i.numericUpDown.Name == item.id.ToSsortingng()).numericUpDown.Value = item.count; } 

Conseil : En termes de performances, il est préférable d’utiliser la deuxième méthode.

C’est ce que je fais quand je dois modifier la collection.

 foreach (OrderItem item in OrderInfo.order.ToList()) { ... } 

Créez une copie. Énumérez la copie, mais mettez à jour l’original.

Vous pouvez utiliser une méthode statique d’extension ToEach:

 public delegate void ToEachTransformAction(ref T Telement); [Extension()] public static void ToEach(Generic.IList thislist, ToEachTransformAction Transform) { for (var n = 0; n < thislist.Count; n++) { Transform.Invoke(thislist(n)); } }