public IList <ClusterPrototype> MergeClustersIfRequired(IList <ClusterPrototype> clusters) { var clustersToIterateOver = new List <ClusterPrototype>(clusters); foreach (var cluster in clustersToIterateOver) { foreach (var otherCluster in new List <ClusterPrototype>(clusters)) { if (cluster != otherCluster && this.IsMergeRequired(cluster, otherCluster)) { clusters.Remove(cluster); clusters.Remove(otherCluster); clusters.Add(ClusterPrototype.Merge(cluster, otherCluster)); } } } return(clusters); }