使用linq时,在.ForEach()之前调用.Any()有什么好处吗?

时间:2013-07-02 12:43:57

标签: c# .net linq

我有很多方法,如下所示:

    void ValidateBuyerRules()
    {
        var nodesWithRules = ActiveNodes.Where(x => x.RuleClass.IsNotNullOrEmpty());

        **if (!nodesWithRules.Any()) return;**

        foreach (var ruleClass in nodesWithRules)
        {
            // Do something here
        }
    }

正如您所看到的,我检查nodesWithRules是否有任何项并在执行foreach语句之前退出方法,但这是不必要的代码吗?

3 个答案:

答案 0 :(得分:13)

除非你想要避免foreach语句之后有一些逻辑,否则这是不必要的,因为它会起到同样的作用。

foreach迭代nodesWithRules时检测到没有项目并退出循环。

答案 1 :(得分:4)

如果这是linq 2 sql,请不要这样做。

您需要额外往返。

此外,如果你有任何其他类型的IEnumerable,你应该避免这种情况。 .net为底层列表做了一些技巧,但你不应该依赖它们。

答案 2 :(得分:0)

在Where之前调用Any是没有意义的。如果Where查询没有返回结果,则永远不会进入for循环。

在实际操作之前调用Any会最终损害性能,因为您正在进行两次查询。