5

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

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

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

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

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

4

3 回答 3

15

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

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

于 2013-07-02T12:46:32.520 回答
4

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

您会导致额外的往返行程。

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

于 2013-07-02T12:50:17.953 回答
0

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

在 where 之前调用 Any 实际上最终会损害性能,因为您正在执行两个查询。

于 2013-07-02T12:49:26.207 回答