public TeamId(string competitionIdentifier, int teamNumber) { if (!CompetitionIdentificationValidator.TryGetTeamIdNumberLength(competitionIdentifier, out digitCount)) { throw new ArgumentOutOfRangeException(nameof(competitionIdentifier)); } if (teamNumber <= 0 || teamNumber > CompetitionIdentificationValidator.GetMaximumNumericId(digitCount)) { throw new ArgumentOutOfRangeException(nameof(teamNumber)); } CompetitionIdentifier = competitionIdentifier; TeamNumber = teamNumber; }
public static bool TryParse(string idString, out TeamId teamId) { teamId = default(TeamId); // length must be at least 3: 1 or more chars competition ID, 1 char '-', 1 or more chars numeric ID if (idString == null || idString.Length < 3) { return(false); } var competitionIdBuilder = new System.Text.StringBuilder(idString.Length / 2); string competitionId = null; int numericId = 0; int expectedDigitCt = 0; int receivedDigitCt = 0; // parser state int state = 0; foreach (char c in idString) { switch (state) { case 0: // reading competition ID if (c != '-') { competitionIdBuilder.Append(c); } else { state = 1; competitionId = competitionIdBuilder.ToString(); if (!CompetitionIdentificationValidator.TryGetTeamIdNumberLength(competitionId, out expectedDigitCt)) { return(false); } } break; case 1: // reading numeric ID if ('0' <= c && c <= '9') { numericId *= 10; numericId += c - '0'; receivedDigitCt++; } else { return(false); } break; } } if (state == 0 || receivedDigitCt != expectedDigitCt) { return(false); } teamId = new TeamId(competitionId, numericId, expectedDigitCt); return(true); }
public override string ToString() { return(string.Format("{0}-{1}", CompetitionIdentifier, TeamNumber.ToString(CompetitionIdentificationValidator.GetFormatString(digitCount)))); }