




Как насчет:
var qry = from item in itemlist
select new {item.X, item.Y,
Dummies = item.examples.Select(
ex => ex.GetDummy())
};
foreach (var item in qry)
{
p.AddStuff(item.X, item.Y, item.Dummies.ToList());
}
Не уверен, что это намного яснее, хотя ... лично я думаю, что мог бы просто использовать оригинальную версию foreach ... возможно, разделив бит GetDummy:
foreach (var item in itemlist)
{
var dlist = item.examples.Select(ex => ex.GetDummy()).ToList();
p.AddStuff(item.X,item.Y,dlist);
}
Самое смешное, что раньше у меня были отрицательные голоса за то, что я указывал, когда что-то не подходит для LINQ ... странно.
если itemlist - это коллекция List<T>, вы можете:
var p = new pmaker();
itemlist.ForEach(item =>
p.AddStuff(item.X, item.Y,
(from ex in item.examples
select ex.GetDummy()).ToList())
);
а если так понятнее? Я думаю, что нет, вы не должны использовать LINQ и делегатов только потому, что вам это нравится, а потому, что они лучше заявляют цель вашего кода.
Расширяя ответ Марка, вы можете использовать All для добавления элементов в p, но он немного злоупотребляет All, если p.AddStuff не может выйти из строя.
(var qry = from item in itemlist
select new {item.X, item.Y,
Dummies = item.examples.Select(
ex => ex.GetDummy())
}).All(item=>{p.AddStuff(item.X, item.Y, item.Dummies.ToList()); return true;});
Если p.AddStuff может выйти из строя, и вы хотите убедиться, что все элементы были добавлены, было бы вполне уместно сделать это следующим образом:
bool allAdded = (var qry = from item in itemlist
select new {item.X, item.Y,
Dummies = item.examples.Select(
ex => ex.GetDummy())
}).All(item=>p.AddStuff(item.X, item.Y, item.Dummies.ToList()));
Узнать, когда не использовать LINQ, вероятно, так же важно, как и знать, когда его использовать :-)