0

.Net の Version クラスは、予想どおり CompareTo インターフェイスを実装していません。4 つの数値を比較するのではなく、英数字で比較を処理しているようです。たぶんバグではなく、「機能」です。

以下で期待するように、比較(および標準の <、=、および > 演算子)が機能しない理由を誰でも明らかにできますか?

    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 より小さい。

4

1 に答える 1

4

いいえ、それは 4 つの部分を比較して、それぞれを数値として扱っています。5 と 3251 ではどちらが大きいですか? 確かにそれは 3251 です。したがって、バージョン 1.1.3251.* は 1.1.5.* よりも「新しい」(つまり大きい) ことになります。

1.1.5 より前に 1.1.3251 がリリースされた場合、1 つの数字 (「ビルド」部分) を一連の数字として効果的に使用していることになります。それは間違いです。

于 2008-11-25T11:44:02.410 に答える