测试列表中的所有项目是否在某个项目之前完成

本文关键字:项目 是否 列表 测试 | 更新日期: 2023-09-27 18:21:09

我有一个阶段列表,每个阶段都有IdStageNumber(即索引)、Name和一个Progress object,其中包含一个名为IsCompleted的布尔字段。

如何测试my current stage(我将传递到方法中的对象)之前的所有项目是否都完成?我有以下代码,但我得到了false返回,我已经检查了我的列表,阶段0被检查为completed

var indexToTest = mystage.StageNumber; //1 in this instance, as 0 is always true
Assert.IsTrue(progress.Stages.All(stage => stage.StageNumber < indexToTest && stage.Progress.IsCompleted));

测试列表中的所有项目是否在某个项目之前完成

一旦找到索引大于或等于您的任何阶段,它就会失败。我怀疑你想要:

Assert.IsTrue(progress.Stages.TakeWhile(stage => stage.StageNumber < indexToTest)
                             .All(stage => stage.Progress.IsCompleted));

这是假设阶段是有序的。如果不是,你真的想测试每个阶段都是,要么是在你的索引测试完成:

Assert.IsTrue(progress.Stages.All(stage => stage.StageNumber >= indexToTest
                                           || stage.Progress.IsCompleted));

编辑:如果这有助于你思考,这里有一个替代方案:

Assert.IsFalse(progress.Stages.Any(stage => stage.StageNumber < indexToTest
                                            && !stage.Progress.IsCompleted));

这意味着"indexToTest之前不应该有任何未完成的阶段"。