비교를 사용하여 .NET 버전 인스턴스 비교는 예상대로 작동하지 않습니다.

StackOverflow https://stackoverflow.com/questions/317084

문제

.NET의 버전 클래스는 내가 예상 한대로 비교 인터페이스를 구현하지 않으며, 네 숫자를 비교하는 대신 알파 너머로 비교를 처리하는 것으로 보입니다. 아마도 버그가 아니라 '기능'일 수도 있습니다.

누구든지 비교 (그리고 표준 <, = 및> 연산자)가 내가 예상대로 작동하지 않는 이유를 밝힐 수 있습니까?

    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보다 <입니다.

도움이 되었습니까?

해결책

아니요, 네 부분을 비교하여 각 부분을 숫자로 취급합니다. 더 큰 번호는 5 또는 3251입니까? 확실히 3251입니다. 따라서 버전 1.1.3251.*는 1.1.5보다 "새로운"(즉, 더 큽니다.*.

1.1.5 전에 1.1.3251이 오면 일련의 숫자로 단일 숫자 ( "빌드"부분)를 효과적으로 사용하고 있습니다. 그것은 실수입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top