ArgumentException:版本字符串部分太短或太长

时间:2019-11-05 20:16:32

标签: c# asp.net-core

我正在从数据库中获取产品版本,该产品版本存储为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();
}

1 个答案:

答案 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)。