PDA

View Full Version : جستجو در لیست



saed2006
دوشنبه 19 بهمن 1388, 11:14 صبح
من توی لیست با Linq یک کوئری نوشتم تا کوچکترین ها توی لیست بیرون بیاد
میخوام همه این کوچکترین ها رو حذف کنم
ولی با کد زیر



private void dralineforremovspase(List<mpoints> mi)
{
for (int i = 0; i < mi.Count; i++)
{
var y = (from c in mi
where c.dis == mi.Min(a => a.dis)
select c );
foreach (mpoints mm in y)
{

var d = (from c in mi
where c.f1== mm.f1 || c.f1 == mm.f2
select c);
foreach (mpoints mdm in d)
{
mi.Remove(mdm);
}
}


}
}



این خطا رو میگیرم:
Collection was modified; enumeration operation may not execute.

اَرژنگ
دوشنبه 19 بهمن 1388, 16:06 عصر
من توی لیست با Linq یک کوئری نوشتم تا کوچکترین ها توی لیست بیرون بیاد
میخوام همه این کوچکترین ها رو حذف کنم
ولی با کد زیر



private void dralineforremovspase(List<mpoints> mi)
{
for (int i = 0; i < mi.Count; i++)
{
var y = (from c in mi
where c.dis == mi.Min(a => a.dis)
select c );
foreach (mpoints mm in y)
{

var d = (from c in mi
where c.f1== mm.f1 || c.f1 == mm.f2
select c);
foreach (mpoints mdm in d)
{
mi.Remove(mdm);
}
}


}
}



این خطا رو میگیرم:
Collection was modified; enumeration operation may not execute.

۱.خطا دارد بهتان میگه که مشکل چیه، زمان پیمایش یک لیست را تغییر نمیدند.
۲.این کد ۳ تا حلقه تو در تو استفاده کرده، اول قبل از اینکه به مشکل ۱ فکر کنید کد را تمیز کنید. و یا اینکه
۳.در مورد اینکه هدف چیه توزیح بدید که راه درست را پیشنهاد بدیم، کدی که فرستادید زیادی پیچیده‌است و کدی که زیاد پیچیده است را اول تمیز و ساده میکنند و دوم دیباگ.

gwbasic
سه شنبه 20 بهمن 1388, 17:49 عصر
foreach پیمایش را به صورت ReadOnly انجام می دهد پس در داخل آن نمی توان تغییری ایجاد کرد.
در ضمن این کد شما بیشتر شبیه یک معما می باشد تا اینکه یک کاری انجام دهد