在.net版本类不实现CompareTo接口,因为我所期望的,它似乎处理比较四个数字的比较,而不是字母数字。也许不是一个错误,而是一个“功能”。

任何人都可以照到为什么比较轻(以及标准<=和>运算符),我会低于预期不工作?

    Dim MainVersion As New Version("1.1.3251.4029")
    Dim Ver_Low As New Version("1.1")
    Dim Ver_Same As New Version("1.1.3251.4029")
    Dim Ver_High As New Version("1.1.5.0")

    ' CompareTo here yields 1 which is expected as MainVersion is greater than Ver_Low.
    MessageBox.Show(String.Format("{0}.CompareTo({1}) = {2}", MainVersion.ToString(), Ver_Low.ToString(), MainVersion.CompareTo(Ver_Low).ToString()))

    ' CompareTo here yields 0 which is expected as MainVersion and Ver_Same are the same.
    MessageBox.Show(String.Format("{0}.CompareTo({1}) = {2}", MainVersion.ToString(), Ver_Same.ToString(), MainVersion.CompareTo(Ver_Same).ToString()))

    ' **** Issue here **** CompareTo here yields 1 which is NOT expected as MainVersion is less than Ver_High.
    MessageBox.Show(String.Format("{0}.CompareTo({1}) = {2}", MainVersion.ToString(), Ver_High.ToString(), MainVersion.CompareTo(Ver_High).ToString()))

我认识的人都做自己的手动变通办法此,我想知道这是由设计或它应该工作,我可能会做一些愚蠢的。

在预先感谢

赖安

更新:我在做一些愚蠢的巧妙处理与他们在同是作为IP地址。例如; 1.1.3023.5364大于1.1.5但1.1.3023.5364是<大于1.1.5000。

有帮助吗?

解决方案

没有,它比较所述四个部分,把每个作为一个数字。 这是更大的数字:5或3251?当然,它是3251。 因此版本1.1.3251。*是 “更新”(即大于)1.1.5。*。

如果你有1.1.3251 1.1.5之前到来,那么你有效地利用单号(以下简称“建”的部分)作为数字序列。这是一个错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top