Сравнение экземпляра .Net версии с использованием CompareTo не работает должным образом - PullRequest
0 голосов
/ 25 ноября 2008

Класс Version в .Net не реализует интерфейс CompareTo, как я и ожидал, кажется, что он обрабатывает сравнение буквенно-цифрово вместо сравнения четырех чисел. Может быть, не ошибка, а «фича».

Может кто-нибудь пролить свет на то, почему сравнение (а также стандартные операторы <, = и>) не работают так, как я ожидал бы ниже?

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

Я знаю, что люди сделали для этого свои собственные обходные пути, я хотел бы знать, если это было разработано или это должно сработать, и я мог бы делать что-то глупое.

Заранее спасибо

Ryan

Обновление: я делал что-то слегка тупое и относился к ним так же, как к IP-адресам. Например; 1.1.3023.5364 больше 1.1.5, но 1.1.3023.5364 меньше 1.1.5000.

1 Ответ

4 голосов
/ 25 ноября 2008

Нет, сравниваются четыре части, каждая из которых рассматривается как число. Какой номер больше: 5 или 3251? Конечно, это 3251. Следовательно, версия 1.1.3251. * Является «более новой» (то есть, большей), чем 1.1.5. *.

Если у вас 1.1.3251, предшествующий 1.1.5, то вы фактически используете одно число (часть «сборки») в качестве последовательности цифр. Это ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...