Version对象错误地比较了两个版本

时间:2012-12-14 17:06:42

标签: c# asp.net .net version compareto

我正在使用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”,然后将其初始化为Version对象。

任何人都有任何想法为什么.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吗?

2 个答案:

答案 0 :(得分:3)

Version.CompareTo(Version)返回有符号整数

negative means it's before
zero the same
positive after.

结果的大小越大,版本越远。

摆脱开关,或先判断比较的返回。

答案 1 :(得分:3)

Version类为比较运算符提供运算符重载,为什么不使用它们呢?它确实使代码的意图更加清晰。

意思是你可以简单地写:

if(versionB >= versionA) {
  _doThis = true;
}

对我来说,这比调用CompareTo并检查返回值的符号要清楚得多。