我试图想办法在满足某些条件时使用TakeWhile打破循环。
即
var i = 0;
List<IContent> t = new List<IContent>();
// children is a List<> with lots of items
foreach (var x in children)
{
if (i >= 10)
{
break;
}
if (x.ContentTypeID == 123)
{
i++;
t.Add(x);
}
}
我想做的是使用Linq写
var i = 0;
var a = children.TakeWhile(
x =>
{
if (i >= 10)
{
break; // wont work
}
if (x.ContentTypeID == 123)
{
i++;
return true;
}
return false;
});
有什么想法吗?感谢
答案 0 :(得分:4)
此处您不需要TakeWhile
- 只需过滤符合您条件的项目,并且不超过10个匹配的项目:
children.Where(x => x.ContentTypeID == 123).Take(10)
TakeWhile
会在满足某些条件的情况下使用所有项目。但是您不需要采取所有项目 - 您希望跳过那些没有必需ContentTypeID
的项目。
答案 1 :(得分:1)
接受的答案解决了这个帖子。这个答案涉及标题。
TakeWhile和Take可以一起使用。 TakeWhile将在第一场比赛中停止,Take将在一定数量的比赛后停止。
var playlist = music.TakeWhile(x => x.Type == "Jazz").Take(5);