.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。
答案 0 :(得分:4)
不,它正在比较这四个部分,将每个部分视为一个数字。 哪个数字越大:5或3251?当然是3251。 因此版本1.1.3251。*比1.1.5更新(即更大)。*。
如果您在1.1.5之前得到1.1.3251,那么您实际上使用单个数字(“构建”部分)作为数字序列。这是一个错误。