我正在从数据库中获取产品版本,该产品版本存储为VARCHAR
,并具有类似2.6.12-build.222
的价值。我需要修剪-
之后的所有内容,因此结果是2.6.12
,下面是我如何执行此字符串操作并正常工作的代码,正在修剪的版本,但是我需要比较两个版本对于我正在使用Version
类的进一步操作,但是一旦我将子字符串传递给Version类,它就会向我显示此错误-
ArgumentException: Version string portion was too short or too long.
我所有的版本均为2.6.12
格式
var resourceGuids = httpResp.Select(xl => xl.guid).ToList();
var existingBuilds = _DBcontext.Deployedproducts.Where(xl => resourceGuids.Contains(xl.Guid.ToString())).ToList();
var x = existingBuilds.FirstOrDefault(o => o.Guid == item.guid);
Version v = new Version(x.ProductVersion.Substring(0, x.ProductVersion.LastIndexOf("-") + 1).Replace(@"-",""));
if (item.Item1.version < v)
{
x.LatestMajorRelease = item.Item1.version.ToString();
}
答案 0 :(得分:1)
如果您可以使用无破折号的值,则必须在执行子字符串之前先进行检查。
string version = x.ProductVersion;
int dashIndex = x.ProductVersion.IndexOf("-");
if(dashIndex > -1)
version = version.Substring(0, dashIndex);
Version v = new Version(version);
请注意,我使用IndexOf
是为了防止以后再出现破折号。
您还可以进行其他检查,例如dashIndex
是否为0,这将导致字符串为空,因为它可能以无效的版本开头。
实际上,如果dashIndex
小于3,则它不能是有效版本(因为该版本至少需要2个部分,例如1.1或2.3)。