c# - 版本对象错误地比较了两个版本

标签 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”,然后将其初始化为一个版本对象。

有人知道为什么 .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 吗?

最佳答案

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

意味着你可以简单地写:

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

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

关于c# - 版本对象错误地比较了两个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883184/

相关文章:

javascript - 如何使用 Sweet Alert 进行确认?

c# - 拆分字符串并忽略引号内的定界符

c# - 关闭门后 Swagger-UI 中的 ServiceStack API 文档

c# - 如何将单个 key 文件链接到解决方案中的每个项目?

c# - 单击事件调用隐藏的 FileUpload 控件

c# - 使用 jQuery ajax 加载母版页后,带有更新面板的 aspx 页面无法正常工作

c# - 是否有任何 C# 框架或代码来解析 *blg 性能计数器日志文件?

c# - 尝试将今天的日期与一个月前的日期进行比较

c# - 使用 .FromAsync 任务状态 = WaitingForActivation

c# - .netcore TestScheduler 的 Nuget 包