public ReleaseVersion WithCandidateLevel(ReleaseCandidateLevel candidateLevel) { if (CandidateLevel == candidateLevel) { return(this); } return(new ReleaseVersion(Major, Minor, Patch, candidateLevel, Candidate, Build)); }
public ReleaseVersion( int major, int minor, int patch, ReleaseCandidateLevel candidateLevel = ReleaseCandidateLevel.Stable, int candidate = 0, int build = 0) { if (major < 0 || major > 99) { throw new ArgumentOutOfRangeException(nameof(major), "must be 0 <= X <= 99"); } if (minor < 0 || minor > 99) { throw new ArgumentOutOfRangeException(nameof(minor), "must be 0 <= X <= 99"); } if (patch < 0 || patch > 99) { throw new ArgumentOutOfRangeException(nameof(patch), "must be 0 <= X <= 99"); } if (candidate < 0 || candidate > 99) { throw new ArgumentOutOfRangeException(nameof(candidate), "must be 0 <= X <= 99"); } if (build < 0 || build > 9999) { throw new ArgumentOutOfRangeException(nameof(build), "must be 0 <= X <= 9999"); } switch (candidateLevel) { case ReleaseCandidateLevel.Local: case ReleaseCandidateLevel.Dev: case ReleaseCandidateLevel.Alpha: case ReleaseCandidateLevel.Beta: case ReleaseCandidateLevel.Preview: case ReleaseCandidateLevel.StableCandidate: break; case ReleaseCandidateLevel.Stable: if (candidate != 0) { throw new ArgumentOutOfRangeException( nameof(candidate), $"must be 0 if {nameof (candidateLevel)} is Stable"); } break; default: throw new ArgumentOutOfRangeException(nameof(candidateLevel)); } Major = (byte)major; Minor = (byte)minor; Patch = (byte)patch; CandidateLevel = candidateLevel; Candidate = (byte)candidate; Build = (ushort)build; }