Domanda

La classe Version in .Net non implementa l'interfaccia CompareTo come mi aspetterei, sembra gestire il confronto alfanumerico invece di confrontare i quattro numeri. Forse non un bug, ma una "caratteristica".

Qualcuno può far luce sul perché il confronto (e anche gli operatori < ;, = e >) standard non funzionano come mi aspetterei di seguito?

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

So che le persone hanno fatto le loro soluzioni manuali per questo, mi piacerebbe sapere se questo è di progettazione o dovrebbe funzionare e potrei fare qualcosa di stupido.

Grazie in anticipo

Ryan

Aggiornamento: stavo facendo qualcosa di leggermente stupido e trattarli nello stesso modo degli indirizzi IP. Per esempio; 1.1.3023.5364 è maggiore di 1.1.5 ma 1.1.3023.5364 è & Lt; di 1.1.5000.

È stato utile?

Soluzione

No, sta confrontando le quattro parti, trattandole come un numero. Qual è il numero più grande: 5 o 3251? Sicuramente è 3251. Pertanto la versione 1.1.3251. * È & Quot; più recente & Quot; (ovvero maggiore) di 1.1.5. *.

Se hai 1.1.3251 in arrivo prima della 1.1.5, allora stai effettivamente usando un singolo numero (la " build " parte) come una sequenza di cifre. Questo è un errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top