Frage

Die Version Klasse in .net nicht den CompareTo Schnittstelle implementieren, wie ich erwarten würde, so scheint es den alphanummerisch statt Vergleich die vier Zahlen vergleichen zu behandeln. Vielleicht kein Bug, sondern ein 'Feature'.

Kann jemand ein Licht auf leuchten, warum der Vergleich (und auch der Standard <, = und> Betreiber) funktionieren nicht wie ich weiter unten erwarten würde?

    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()))

Ich weiß, dass die Menschen ihre eigenen manuellen Workarounds für das getan haben, ich möchte wissen, ob dies durch Design ist oder es sollte funktionieren und ich könnte etwas zu tun dumm sein.

Vielen Dank im Voraus

Ryan

Update: Ich habe etwas zu tun, auf subtile Weise stumm und behandelt sie in die gleiche wie IP-Adressen war. Zum Beispiel; 1.1.3023.5364 größer als 1.1.5 aber 1.1.3023.5364 ist

War es hilfreich?

Lösung

Nein, es ist einen Vergleich der vier Teile, die jeweils als Nummer behandelt wird. Welches ist die größere Zahl: 5 oder 3251? Sicherlich ist es 3251. Deshalb Version 1.1.3251. * Ist "neuere" (das heißt größer) als 1.1.5. *.

Wenn Sie habe kommen 1.1.3251 vor 1.1.5, dann sind Sie effektiv eine einzelne Zahl (die „build“ Teil) als eine Folge von Ziffern. Das ist ein Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top