سؤال

لدي DTO التي أستخدمها لمعالجة المعاملات. لضمان معالجتها بالترتيب الصحيح ، أستخدم icomparable وفرز قائمة (t) من DTO. هذا يعمل بشكل رائع. ومع ذلك ، فقد حصلت للتو على شرط آخر من أن العميل يريد الإخراج بترتيب مختلف ... هل هناك طريقة للسماح لي أن يكون لدي نوعان مختلفان لنفس الكائن قائمة جديدة من هذا النوع وفرز باستخدام الطريقة الجديدة لهذا الكائن؟ يبدو وكأنه طريقة فظيعة للقيام بذلك ، ولكن لا يمكن العثور على أي شيء يسمح لي بالقيام بذلك.

هل كانت مفيدة؟

المحلول

فيما يلي مثال قمت بتمزيقه من مشروع حديث. يعمل كالسحر. فقط يجب أن تتذكر الاتصال بالوظيفة المناسبة. هذا خارج النطاق لواجهة icomparable ، لذلك قد ترغب في إسقاط ذلك من إعلان الفصل الخاص بك.

Public Class Purchaser
....
Public Shared Function CompareByGroup( _
   ByVal x As Purchaser, ByVal y As Purchaser) As Integer

   If x Is Nothing Then
     If y Is Nothing Then
       ' If x is Nothing and y is Nothing, they're equal. 
       Return 0
     Else
       ' If x is Nothing and y is not Nothing, y is greater. 
       Return -1
     End If
   Else
     If y Is Nothing Then
       ' If x is not Nothing and y is Nothing, x is greater. 
       Return 1
     Else
       ' ...and y is not Nothing, compare by GroupName.
       Return x.GroupName.CompareTo(y.GroupName)
     End If
    End If
  End Function

  Public Shared Function CompareByName( _
    ByVal x As Purchaser, ByVal y As Purchaser) As Integer

    ... 'you get the idea
  End Function

ودعهم هكذا ...

tempList.Sort(AddressOf Classes.Purchaser.CompareByGroup)

أو

tempList.Sort(AddressOf Classes.Purchaser.CompareByName)

نصائح أخرى

أو يمكنك استخدام LINQ إذا كنت على .NET 3.5 أو أعلى.

dim orderedlistofdtos = (from e in listofdtos order by e.whatever select e).Tolist
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top