Tengo dos colecciones de cadenas: CollectionA es una propiedad StringCollection de un objeto almacenado en el sistema, mientras que CollectionB es una lista generada en tiempo de ejecución. CollectionA necesita actualizarse para que coincida con CollectionB si hay alguna diferencia. Así que ideé lo que esperaba que fuera un método LINQ simple para realizar la eliminación.¿Por qué me aparece "La colección se modificó, la operación de enumeración no se puede ejecutar" cuando no se modifica la colección enumerada?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
pero estoy recibiendo un error en "Collection was modified; enumeration operation may not execute"
strDifferences ... a pesar de que es enumerable una separada de la colección está modificando! Originalmente ideé este explícitamente para evadir este error, ya que mi primera implementación lo produciría (como estaba enumerando en CollectionA
y acaba de eliminar cuando !CollectionB.Contains(str)
). ¿Alguien puede arrojar alguna idea de por qué esta enumeración está fallando?
¿No 'ToArray() 'sería mejor aquí? No hay necesidad de usar 'List'. – svick
@svick Eso es algo que me he preguntado durante bastante tiempo, pero esa sería una pregunta que haría otro día. Siempre que no se haya preguntado, por supuesto -chuckle- –
@GraceNote atrapa eso aquí: http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-queries – nawfal