مقارنة سبيل المثال صافي النسخة باستخدام CompareTo لا يعمل كما هو متوقع

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

سؤال

والطبقة الإصدار في صافي لا يطبق اجهة CompareTo كما أتوقع، يبدو للتعامل مع مقارنة alphanumerically بدلا من مقارنة الأرقام الأربعة. ربما ليس خطأ، ولكن "ميزة".

ويمكن لأي شخص أن تسليط الضوء على لماذا مقارنة (وكذلك معيار <، = و> المشغلين) لا تعمل كما أتوقع أدناه؟

    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.3251 المقبلة قبل 1.1.5، ثم كنت تستخدم بشكل فعال عدد واحد ( "البناء" جزء)، وسلسلة من الأرقام. وهذا خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top