비교를 사용하여 .NET 버전 인스턴스 비교는 예상대로 작동하지 않습니다.
문제
.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이 오면 일련의 숫자로 단일 숫자 ( "빌드"부분)를 효과적으로 사용하고 있습니다. 그것은 실수입니다.
제휴하지 않습니다 StackOverflow