public static bool TryParse(string versionString, out VersionNumber version)
{
version = null;
var input = versionString.ToLower();
if (input == "lastmajor")
{
version = VersionNumber.LastMajor;
return true;
}
if (input == "lastminor")
{
version = VersionNumber.LastMinor;
return true;
}
if (input[0] == 'v')
input = input.Substring(1);
var sa = input.Split('.');
if (sa.Length < 2)
return false;
int major, minor;
if (!int.TryParse(sa[0], out major))
return false;
if (!int.TryParse(sa[1], out minor))
return false;
if (sa.Length == 2)
{
version = new VersionNumber(major, minor);
return true;
}
VersionStatus status;
switch (sa[2])
{
case "a":
case "approved": status = VersionStatus.Approved; break;
case "l":
case "locked": status = VersionStatus.Locked; break;
case "d":
case "draft": status = VersionStatus.Draft; break;
case "r":
case "rejected": status = VersionStatus.Rejected; break;
case "p":
case "pending": status = VersionStatus.Pending; break;
default:
return false;
}
version = new VersionNumber(major, minor, status);
return true;
}