public void Next() { if (IsDone) { return; } while (idx < tripAdvisorDatabase.Ids.Length) { Guid id = tripAdvisorDatabase.Ids[idx]; if (id == null) { ++idx; continue; } string name = null; if (!tripAdvisorDatabase.Prices.TryGetValue(id, out string price) || !tripAdvisorDatabase.Ratings.TryGetValue(id, out string rating) || !tripAdvisorDatabase.Countries.TryGetValue(id, out string country)) { ++idx; continue; } for (int i = 0; i < tripAdvisorDatabase.Names.Length; ++i) { if (tripAdvisorDatabase.Names[i].TryGetValue(id, out name)) { break; } } Current = new TripAdvisorNode { Name = name, Price = price, Rating = rating, Country = country }; ++idx; if (tripAdvisorDatabase.GetDecoder().Decode(Current) != null) { return; } } IsDone = true; }