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

C# 在使用linq时,在.ForEach()之前调用.any()有什么好处吗?,c#,.net,linq,C#,.net,Linq,我有很多方法,如下所示: void ValidateBuyerRules() { var nodesWithRules = ActiveNodes.Where(x => x.RuleClass.IsNotNullOrEmpty()); **if (!nodesWithRules.Any()) return;** foreach (var ruleClass in nodesWithRules) {

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

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

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

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

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

除非您在
foreach
语句之后有一些您想要避免的逻辑,否则这是不必要的,因为它将同样工作


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

在Where之前调用任何项都没有意义。如果Where查询没有返回结果,您将永远不会进入for循环


在where之前调用Any实际上会影响性能,因为您要执行两个查询。

如果这是linq 2 sql,千万不要这样做

你会造成额外的往返

另外,如果您有任何其他类型的IEnumerable,您应该避免使用它。net为底层列表提供了一些技巧,但您不应该依赖这些技巧