示例#1
0
 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;
 }
示例#2
0
        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);
        }
示例#3
0
 public override string ToString()
 {
     return(string.Format("{0}-{1}", CompetitionIdentifier, TeamNumber.ToString(CompetitionIdentificationValidator.GetFormatString(digitCount))));
 }