如预期比较使用的CompareTo不起作用.NET版本实例
题
在.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之前到来,那么你有效地利用单号(以下简称“建”的部分)作为数字序列。这是一个错误。
不隶属于 StackOverflow