[c#] كيف يمكنني حلقة من خلال العناصر في مربع قائمة ثم إزالة تلك العناصر؟



Answers

كل شخص آخر قد نشر "العودة إلى الوراء" الجواب، لذلك سأعطي البديل: إنشاء قائمة من العناصر التي تريد إزالتها، ثم إزالتها في النهاية:

List<string> removals = new List<string>();
foreach (string s in listBox1.Items)
{
    MessageBox.Show(s);
    //do stuff with (s);
    removals.Add(s);
}

foreach (string s in removals)
{
    listBox1.Items.Remove(s);
}

في بعض الأحيان يكون "العمل إلى الوراء" الأسلوب أفضل، وأحيانا ما سبق هو أفضل - خاصة إذا كنت تتعامل مع نوع الذي يحتوي على أسلوب RemoveAll(collection) . يستحق معرفة كل من الرغم من ذلك.

Question

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

قائمة بأن هذا العداد ملزم بتعديله. لا يمكن استخدام العداد إلا إذا لم تتغير القائمة.

foreach (string s in listBox1.Items)
{
    MessageBox.Show(s);
    //do stuff with (s);
    listBox1.Items.Remove(s);
}

كيف يمكنني إزالة العنصر و لا يزال حلقة من خلال محتويات؟




لا يمكنك إجراء تعديلات على المجموعة التي يتم تكرارها ضمن كتلة فوريش.

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

For Each item As DataRowView In New System.Collections.ArrayList(lbOrdersNeedToBeVoided.Items)

يرجى قراءة http://social.msdn.microsoft.com/Forums/en-AU/vbgeneral/thread/b4d1f649-d78a-4e5b-8ad8-1940e3379bed




كيف حول:

foreach(var s in listBox1.Items.ToArray())
{
    MessageBox.Show(s);
    //do stuff with (s);
    listBox1.Items.Remove(s);
}

و تواراي يجعل نسخة من القائمة، لذلك لا داعي للقلق حول ذلك تغيير القائمة أثناء معالجته.




عليك أن تذهب من خلال المجموعة من العنصر الأخير إلى الأول. هذا الرمز هو في ف

for i as integer= list.items.count-1 to 0 step -1
....
list.items.removeat(i)
next



Related



Tags

c# c#   listbox