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

使用CompareTo比较.Net版本实例无法按预期工作,.net,version,compare,compareto,.net,Version,Compare,Compareto,Net中的Version类没有像我所期望的那样实现CompareTo接口,它似乎处理字母数字比较,而不是比较四个数字。也许不是一个bug,而是一个“特性” 有人能解释一下为什么比较(以及标准操作符)不能像我下面所期望的那样工作吗 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.402

Net中的Version类没有像我所期望的那样实现CompareTo接口,它似乎处理字母数字比较,而不是比较四个数字。也许不是一个bug,而是一个“特性”

有人能解释一下为什么比较(以及标准操作符)不能像我下面所期望的那样工作吗

    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.5之前有1.1.3251,那么实际上是使用单个数字(“构建”部分)作为数字序列。这是一个错误。

不,这是比较四个部分,将每个部分视为一个数字。 哪个数字大:5还是3251?当然是3251。 因此,版本1.1.3251.*比1.1.5.*更“新”(即更高)


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

我刚刚使用Reflector进行了检查,我同意这就是它所做的,当您习惯于以IP地址为基础,将每个四元组相乘时,确实需要一些时间才能理解它。不管怎样,谢谢你的澄清。我刚刚检查了使用Reflector,我同意这就是它所做的,当你习惯于用IP地址来思考每一个四元组的倍数时,确实需要一些时间来理解它。无论如何,谢谢你的澄清。