2013-07-06 35 views
2

我有一個變量(ApplicationVersionInformationArray(0)),它保存以下值:「1.0.0.1」的TryParse一個雙

什麼是確定是否該值大於1.0

這裏的最佳方式是我當前的代碼(ApplicationVersionInformationNumber是Double類型):

If Double.TryParse(ApplicationVersionInformationArray(0), ApplicationVersionInformationNumber) = False Then 
     Return False 
    Else 
     If ApplicationVersionInformationNumber < 1 Then Return False 
    End If 

UPDATE

我發現有一個版本類可以輕鬆地進行這種轉換。

+0

轉換「1.0.0.1」的'Double'是不是做這個(當我咆哮在VS的代碼中,我得到了轉換0.0)的方式。 – Tim

+0

另外,您想要比較哪個版本號?整個東西?主版本號(1),次版本號(0),修訂版(0),版本(1)或某種組合? – Tim

回答

1

這是一個精簡版本的類,我寫了很長時間回來比較版本。

Public Class Version 
    Implements IEquatable(Of Version) 

    Private _mmajorVersion As Integer = 0 
    Private _mminorVersion As Integer = 0 
    Private _mrivision As Integer = 0 
    Private _mbuild As Integer = 0 

    Sub New() 
     _mmajorVersion = 0 
     _mminorVersion = 0 
     _mrivision = 0 
     _mbuild = 0 
    End Sub 
    Sub New(ByVal VersionObj As Object) 
     If VersionObj Is DBNull.Value Then 
      _mmajorVersion = 0 
      _mminorVersion = 0 
      _mrivision = 0 
      _mbuild = 0 
     Else 
      ParseVersionString(VersionObj.ToString) 
     End If 
    End Sub 

    Public Sub New(ByVal VersionString As String) 
     ParseVersionString(VersionString) 
    End Sub 

    Public Property MajorVersion As Integer 
     Get 
      Return _mmajorVersion 
     End Get 
     Set(ByVal value As Integer) 
      _mmajorVersion = value 
     End Set 
    End Property 
    Public Property MinorVersion As Integer 
     Get 
      Return _mminorVersion 
     End Get 
     Set(ByVal value As Integer) 
      _mminorVersion = value 
     End Set 
    End Property 
    Public Property Revision As Integer 
     Get 
      Return _mrivision 
     End Get 
     Set(ByVal value As Integer) 
      _mrivision = value 
     End Set 
    End Property 

    Private Sub ParseVersionString(ByVal Version_String As String) 
     Dim p() As String = Version_String.Split(New Char() {"."}, 4) 
     If IsNumeric(p(0)) Then 
      _mmajorVersion = CInt(p(0)) 
     End If 
     If p.Length > 1 Then 
      If IsNumeric(p(1)) Then 
       _mminorVersion = CInt(p(1)) 
      End If 
     End If 
     If p.Length > 2 Then 
      If IsNumeric(p(2)) Then 
       _mrivision = CInt(p(2)) 
      End If 
     End If 
     If p.Length > 3 Then 
      If IsNumeric(p(3)) Then 
       _mbuild = CInt(p(3)) 
      End If 
     End If 
    End Sub 

    Public Shared Operator <(ByVal Version1 As Version, ByVal Version2 As Version) As Boolean 
     If Version1 = Version2 Then Return False 
     If Version1._mmajorVersion < Version2._mmajorVersion Then Return True 
     If Version1._mmajorVersion > Version2._mmajorVersion Then Return False 
     If Version1._mminorVersion < Version2._mminorVersion Then Return True 
     If Version1._mminorVersion > Version2._mminorVersion Then Return False 
     If Version1._mrivision < Version2._mrivision Then Return True 
     If Version1._mrivision > Version2._mrivision Then Return False 
     If Version1._mbuild < Version2._mbuild Then Return True 
     If Version1._mbuild > Version2._mbuild Then Return False 
     Return False 
    End Operator 
    Public Shared Operator >(ByVal Version1 As Version, ByVal Version2 As Version) As Boolean 
     Return Not (Version1 < Version2 Or Version1 = Version2) 
    End Operator 

    Public Shared Operator <=(ByVal Version1 As Version, ByVal Version2 As Version) As Boolean 
     If Version1 > Version2 Then Return False 
     Return True 
    End Operator 
    Public Shared Operator >=(ByVal Version1 As Version, ByVal Version2 As Version) As Boolean 
     If Version1 < Version2 Then Return False 
     Return True 
    End Operator 

    Public Shared Operator =(ByVal Version1 As Version, ByVal Version2 As Version) As Boolean 
     If Version1._mmajorVersion = Version2._mmajorVersion And _ 
      Version1._mminorVersion = Version2._mminorVersion And _ 
      Version1._mrivision = Version2._mrivision And _ 
      Version1._mbuild = Version2._mbuild Then 
      Return True 
     End If 
     Return False 
    End Operator 
    Public Shared Operator <>(ByVal Version1 As Version, ByVal Version2 As Version) As Boolean 
     Return Not Version1 = Version2 
    End Operator 
    Public Overrides Function Equals(ByVal obj As Object) As Boolean 
     If obj Is Nothing Then Return False 
     If obj.GetType.Name <> Me.GetType.Name Then Return False 
     Dim v As Version = DirectCast(obj, Version) 
     Return Me = v 
    End Function 
    Public Overloads Function Equals(ByVal other As Version) As Boolean Implements System.IEquatable(Of Version).Equals 
     Return Me = other 
    End Function 

    Public Overrides Function ToString() As String 
     Return String.Format("{0}.{1}.{2}.{3}", _mmajorVersion.ToString, _mminorVersion.ToString, _mrivision.ToString, _mbuild.ToString) 
    End Function 

    Public Overrides Function GetHashCode() As Integer 
     Return Me.ToString.GetHashCode() 
    End Function 
End Class 

您可以像這樣調用類。

Return New Version(ApplicationVersionInformationArray(0)) > New Version("1.0.0.0") 
0

我發現這個代碼在另一個論壇

Dim versionText As String = "1.0.0.1" 
    Dim currentVersion As Version 

    If Version.TryParse(versionText, currentVersion) Then 
     Dim minVersion As New Version(1, 0) 
     If currentVersion > minVersion Then 
      MessageBox.Show("Current version is greater than minimum version.") 
     Else 
      MessageBox.Show("Current version is NOT greater than minimum version.") 
     End If 
    Else 
     MessageBox.Show("Current version is not valid.") 
    End If 

如果你做一些細微的變化也應該成爲你的目的。 Version中的屬性包含版本中的所有字段。

Version class