سؤال

وأنا أحاول لفرز القائمة باستخدام المندوبين ولكن أنا على الحصول على الخطأ مباراة التوقيع. يقول المترجم لا يمكن تحويل من 'طريقة مجهول'

List<MyType> myList = GetMyList();
myList.Sort( delegate (MyType t1, MyType t2) { return (t1.ID < t2.ID); } );

ما أنا في عداد المفقودين؟

وفيما يلي بعض المراجع وجدت وأنها تفعل ذلك بنفس الطريقة.

المطور فيوجن المرجعي

مايكروسوفت المرجعي

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

المحلول

وأعتقد أنك تريد:

myList.Sort( delegate (MyType t1, MyType t2) 
    { return (t1.ID.CompareTo(t2.ID)); } 
);

لفرز تحتاج إلى شيء آخر غير "صح / خطأ"، تحتاج إلى معرفة ما إذا كان لها يساوي، أكبر من أو أقل من.

نصائح أخرى

وهذا النوع لا تأخذ المسند ثنائي، فإنه يأخذ مندوب Comparison<T> التي تقوم بإرجاع int ليس bool.

وو0 القيم مقابل عندما العناصر على قدم المساواة، <0 عنه عند أول بند هو أقل من الثانية، و>0 لأنه عندما البند الأول أكبر من الثاني.

في المستقبل، إذا كنت ترغب في تصحيح المشاكل من هذا القبيل، فما استقاموا لكم فاستقيموا الدعوة الخروج تعريف مندوب من استدعاء ترتيب مثل هذا:

Comparison<MyType> c = delegate(MyType t1, MyType t2){ ... };
myList.Sort(c);

وبهذه الطريقة، يمكنك معرفة ما إذا كانت المشكلة هي في استدعاء الأسلوب الخاص بك، أو في تعريف المفوض. بعض الناس يفضلون ترك الأمر على هذا النحو (مع اسم وصفي أكثر من "ج"، من الواضح) لجعل رمز أكثر قابلية للقراءة. ويمكنني أن أعتبر أو اتركه = -)

تأكد إذا كانت الخاصية ID الخاص بك هو نوع البيانات القيمة الافتراضية، مثل كثافة العمليات أو سلسلة. إذا كان معرف هو نوع مرجع الكائن، يجب أن الكائن تنفيذ IComparer أو IComparer.

وآسف للمشاركة السابقة. المحرر لا يأخذ <و> حرف، وأنا لم يلاحظوا المعاينة الحق بموجب المحرر. إذا كانت الخاصية ID هو نوع الكائن، يجب أن الكائن تنفيذ IComparer أو IComparer .

والطريقة من obj.Sort (مندوب (...))؛ هو الفرز الديناميكي في مكان واحد. إذا كان لديك عدة أماكن تفعل نفس الفرز أو تحتاج فرز أكثر مرونة، قد تفكر في إنشاء فئة بتنفيذ IComparer . هنا مثال:

public class MyTypeComparer : IComparer<MyType>
{
  public MyTypeComparer() // default comparer on ID
  { ... }

  public MyTypeComparer(bool desc) // default with order specified

  public MyTypeComparer(string sort, bool desc) // specified sort and order such as property name, true or false.
  { ... }

  public int Compare(MyType a, MyType b) // implement IComparer interface
  { ... } // this is real sorting codes
}

وهنا هو مثال لاستخدامه:

List<MyType> myList = GetList();
myList.Sort(new MyTypeComparer());
// myList.Sort(new MyTypeComparer(false));
// myList.Sort(new MyTypeComparer("FirstName", true));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top