icomparable - استدعاء أنواع مختلفة؟
-
29-09-2019 - |
سؤال
لدي 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
لا تنتمي إلى StackOverflow