Utilice el método RemoveWhere de HashSet lugar:
hashset.RemoveWhere(s => s == "somestring");
Se especifica una condición/predicado como el parámetro a el método. Cualquier elemento en el hashset que coincida con el predicado será eliminado.
Esto evita el problema de modificar el hashset mientras se está iterando.
En respuesta a tu comentario:
's' representa el elemento actual que se está evaluando desde dentro de la hashset.
El código anterior es equivalente a:
hashset.RemoveWhere(delegate(string s) {return s == "somestring";});
o:
hashset.RemoveWhere(ShouldRemove);
public bool ShouldRemove(string s)
{
return s == "somestring";
}
EDIT: Algo acaba de ocurrir a mí: ya HashSet es un conjunto que no contiene ningún valores duplicados, simplemente llamando al hashset.Remove("somestring")
será suficiente. No hay necesidad de hacerlo en un bucle ya que nunca habrá más de una coincidencia.
Gracias, ¿qué representarían las s? – aHunter
's' representa el elemento actual desde el hashset que se evalúa. Ver la respuesta actualizada. – adrianbanks