سؤال

وهنا بلدي الإعداد.

public class ItemList : List<Item>
{
  public void Load() {...}
  public void Save() {...}
}

وتحميل يقرأ من ملف XML لملء ItemList

وبعد ذلك محاولة لترتيب قائمة البند أولوية. هذا هو الباحث؟ لأغراض الاختبار ولكن كل العناصر لديها قيمة مختلفة.

ItemList itemList = new ItemList();
itemList.Load();

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority) as ItemList;

return newItemList;

في لnewItemList سبق هو دائما فارغة. itemList لديها عدد من 7. لقد دققت ثلاثة أضعاف وجميع العناصر الموجودة في المثال itemList لديها مجموعة الأولوية.

وماذا أفعل الخطأ؟

ولقد حاولت ايضا ...

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority)
                        .ToList() as ItemList;

لا شيء يبدو أن العمل.

ويرجع الفضل في ذلك مسبقا!

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

المحلول

ولا OrderBy أو ToList بإرجاع ItemList، وبالتالي فإن الصب يعود لاغية، كما أشار جوزيف بها.

وكما كنت وراثة من الطبقة List<T>، يمكنك فقط استخدام الأسلوب ترتيب لترتيب هذا الامر:

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;

نصائح أخرى

والمشكلة هي أن OrderBy لا يقوم بإرجاع ItemList، تقوم بإرجاع IOrderedEnumerable، وToList () لا يقوم بإرجاع ItemList، تقوم بإرجاع قائمة. وفي كلتا الحالتين، كنت تحاول يلقي على حد سواء إلى ItemList، التي لم تكن، حتى تحصل على باطل.

ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});

//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority); 

//this returns a List<Item>
var otherResult = someList.ToList(); 

وأعتقد أن مشكلتك هي "كما ItemList".

ومشغلي LINQ لا تعمل في نفس المكان على الكائن newItemList الخاص بك. لأنها تخلق والعودة الكائنات الجديدة. إذا كنت تريد أن تفعل في مكان الفرز يجب عليك استخدام طريقة ترتيب () من قائمة <>.

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