只需检查集合中至少有一个对象的属性值是否为TRUE

Mar*_*eIV 7 c# linq testing loops

我有一组具有公共IsVisible布尔属性的模型对象.我需要做的就是查找至少有一个集合的值是否设置为TRUE.换句话说,如果我有10,000个物体但第二个物体是true,我不需要旋转其他9,998.我已经有了答案.

现在我知道我可以编写自己的迭代函数并在第一个True'值中突破,但我希望这是LINQ可以做的事情.实际上,它甚至不需要是LINQ.欢迎任何建议.

顺便说一句,选择的语言是C#.

更新:

在这里看到我的上一篇文章 我添加了一些测试代码和时间.看起来LINQ与我自己进行测试相比,表现非常糟糕.当然它写起来更容易,但在关键时刻,我不再确定.

让我感到惊讶的是,我大部分时间都在运行这些,枚举赢得了一个公平的剪辑,但由于某种原因,当我在多次传递中包装测试时,它看起来已经切换到带有缓存计数的索引作为最快的.

我还注意到,如果我没有将所有内容重置为"假",则所有剩余/重复测试似乎要快得多.不知何故,将所有内容重新设置为FALSE(这是故意过度杀戮以准确测试...)会改变一切.

有趣.不知道我现在要走哪条路.这不是一个关键任务系统,所以也许我会追求可读性,但仍然如此.有趣.

Ani*_*Ani 17

你正在寻找的方法是Enumerable.Any.

bool anyObjectsVisible = myObjects.Any(myObject => myObject.IsVisible);
Run Code Online (Sandbox Code Playgroud)

这有你正在寻找的确切的短路语义; 示例代码类似于:

static bool AreAnyObjectsVisible(IEnumerable<MyObject> myObjects)
{
    foreach (var myObject in myObjects)
    {
        if (myObject.IsVisible) return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)