1

我试图弄清楚如何比较两个字符串(数字和多个小数)以查看哪个字符串在数字上更大。

一个字符串是从注册表读取的版本信息与从 XML 文件读取的字符串值进行比较。

这个例子可以模拟我正在尝试做的事情。假设字符串一个变量是我从注册表中读取的字符串变量和来自 XML 的字符串两个变量。

Dim One As String = "10.0.0.0"
Dim Two As String = "2.0.0.0"

If Two >= One Then MsgBox("Greater") Else MsgBox("Smaller")

以下代码无法正确比较,因为这些是字符串,并且字符串比较看到 10 小于 2,尽管 10 确实大于 2。

我已经尝试进行一些整数转换,但没有运气出现小数导致问题。

有谁知道如何将其转换为数字/整数,以便我们可以以某种方式转换字符串,因此 10.0.0.0 会被视为大于 2.0.0.0?

4

1 回答 1

1

您的字符串看起来可能是版本代码。在这种情况下,您可能希望将它们与简单地视为整数不同。对于整数:

Dim str1 = "10.0.0.0"
Dim str2 = "2.0.0.0"
Dim str3 = "10.0.0.1"

Dim n1 = Convert.ToInt32(str1.Split("."c)(0))
Dim n2 = Convert.ToInt32(str2.Split("."c)(0))

在 "." 上拆分字符串后,第一个元素将转换为整数,因此n1将是 10 和n22,允许您直接比较它们。

如果它们确实代表版本,例如str1vs str3,您最终可以进行多个测试来检查每个子段。

.NET 包含一个Version用于此类事物的类型:

Dim v1 As New Version(str1)
Dim v2 As New Version(str3)

If v1 > v2 Then
   ' first ver is larger
Else
   ' str3 contains larger ver
End If

无需单独测试主要/次要/构建/修订部分 - 类型为您完成所有这些。顺便说一句,一旦你有一个有效的Version变量,你可以使用相同的格式创建一个字符串ToString()

Console.WriteLine("The Version is: '{0}'", v2.ToString())

结果:

版本是:'10.0.0.1'

于 2015-03-13T03:22:24.530 回答