使用CompareTo比较.Net Version实例无法按预期工作

时间:2008-11-25 11:38:36

标签: .net version compare compareto

.Net中的Version类没有像我预期的那样实现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.5。比1.1.5000。

1 个答案:

答案 0 :(得分:4)

不,它正在比较这四个部分,将每个部分视为一个数字。 哪个数字越大:5或3251?当然是3251。 因此版本1.1.3251。*比1.1.5更新(即更大)。*。

如果您在1.1.5之前得到1.1.3251,那么您实际上使用单个数字(“构建”部分)作为数字序列。这是一个错误。