【发布时间】:2012-12-02 17:17:26
【问题描述】:
我正在使用 Version 对象来针对两个版本号运行 CompareTo 并在版本 >= versionA 时使 X 发生。
我的问题是,在下面的代码中,CompareTo 声明 VersionB 大于 VersionA。
Version versionA = new Version("2.12");
Version versionB = new Version("2.121");
switch (versionB.CompareTo(versionA))
{
case 0: // Equal To
_doThis = true;
break;
case 1: // Greater Than
_doThat = true;
break;
case 2: // Less Than
_doNothing = true;
break;
}
此比较适用于案例 2。我正在使用正则表达式来匹配传递给该方法的固件版本,如您在此处看到的:
^\S+\s(?(\d+.*)+)\s*.*$
我将接受类似于“2.12 版”的内容,这个正则表达式将只留下“2.12”,然后将其初始化为一个版本对象。
有人知道为什么 .NET 告诉我 2.12 版比 2.121 版更新吗?
编辑:
我已将我的代码更改为如下:
Version versionA = new Version("2.12");
Version versionB = new Version("2.121");
if (versionB.CompareTo(versionA) >= 0)
{
_doThis = true;
}
而且它工作正常。现在,如果我比较“2.11”和“2.121”,它也会返回 1。这个比较不应该返回 -1 吗?
【问题讨论】:
-
the CompareTo is declaring that VersionB is greater than VersionA-- 也许我遗漏了一些东西,但是 121 > 12,所以这不完全符合预期吗? -
版本 B 大于版本 A
-
是的,你的 switch 语句对可能的结果集没有意义。
-
我想知道当它从不返回 2 时你是如何进入 case 2 的,实际上返回范围是 -1,0,1
-
去掉开关小于为负,0为等于,正为大于。结果的幅度越大,它们的差异就越大。
标签: c# asp.net .net version compareto