public void Next() { var rule = new RuleChecker(boardList); var allNeighbors = new List<Point>(); boardList.ToList().ForEach(p => allNeighbors.AddRange(rule.GetNeighbors(p))); boardList = new HashSet<Point>( allNeighbors.Where(p => rule.IsLive(p) || rule.IsNew(p)), new PointComparer()); }