public CandidatesStatus(CandidatesAndIds candidatesAndIds) { var(min, max) = candidatesAndIds.GetIdsRange(); if (min < 0) { throw new ArgumentException($"Id must be at least 0 (found {min})"); } candidatesStates = new State[max + 1]; for (int i = 0; i < candidatesStates.Length; i++) { if (candidatesAndIds.IsValidId(i)) { candidatesStates[i] = State.Undecided; TotalCount++; UndecidedCount++; } else { candidatesStates[i] = State.Invalid; } } }