public override void Evaluate(int spreadMax) { StartEvaluation(); Before(FAgents); var notFailedAgents = from agent in FAgents where agent.ReturnCode != ReturnCodeEnum.Failure select agent; bool pinTrue = IsPinValid(FInput); bool pinFalse = IsPinValid(FInputFalse); var result = Condition(notFailedAgents); int i = 0; foreach (var agent in notFailedAgents) { if (result.ElementAt(i)) { if (pinTrue) { FInput[0].Agents.Add(agent); } } else { if (pinFalse) { FInputFalse[0].Agents.Add(agent); } } i++; } if (pinTrue) { FInput.Sync(); // call child } if (pinFalse) { FInputFalse.Sync(); // call child } After(notFailedAgents); FinishEvaluation(); }