【发布时间】:2020-03-02 06:26:15
【问题描述】:
我正在从存储为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();
}
【问题讨论】:
-
去掉
Substring中的+ 1,你就不需要Replace了。但是请注意,如果没有破折号,您的代码将生成一个空字符串。 -
哦,不,我不能这样做,有些版本没有任何破折号,所以它会返回空字符串
-
如果有一些没有破折号,那么你需要检查
LastIndexOf是否返回-1,在这种情况下你根本不想做子字符串。 -
您的问题是,如果没有破折号,您正在尝试从空字符串创建
Version,因此会出现关于没有足够部分的错误。它需要 2 到 4 个以句点分隔的数字。 -
哦,现在我明白了
标签: c# asp.net-core