c# - 当满足计数或长度条件时使用 TakeWhile 打破循环

标签 c# linq

我正在尝试找出一种在满足某些条件时使用 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;
    });

有什么想法吗?谢谢

最佳答案

这里不需要 TakeWhile - 只需过滤符合您条件的项目,并且不超过 10 个匹配项目:

children.Where(x => x.ContentTypeID == 123).Take(10)

TakeWhile 在满足某些条件时获取所有 项目。但是您不需要获取所有项目 - 您想要跳过那些不需要 ContentTypeID 的项目。

关于c# - 当满足计数或长度条件时使用 TakeWhile 打破循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44282725/

相关文章:

c# - 在 LINQ 语句中使用部分类属性

c# - 用于在 Visual Studio 中创建构造函数的代码片段或快捷方式

c# - 在 Web API 上验证 Azure AD ID token

c# - 静态只读值类型是否在闭包中被提升?

c# - 如何对 Object 类型的属性使用 ShouldSerialize[MemberName]() 方法?

vb.net - vb.net 无法识别 LINQ 查询中的 where 子句?

c# - LINQ 包含不区分大小写

c# - 使用 Linq 表达式计算的属性

c# - 使用数据表 c# 上的查询表达式未获取预期数据

linq - Linq 查询的这一部分叫什么?