我有很多方法,如下所示:
void ValidateBuyerRules()
{
var nodesWithRules = ActiveNodes.Where(x => x.RuleClass.IsNotNullOrEmpty());
**if (!nodesWithRules.Any()) return;**
foreach (var ruleClass in nodesWithRules)
{
// Do something here
}
}
正如您所看到的,我检查nodesWithRules是否有任何项并在执行foreach语句之前退出方法,但这是不必要的代码吗?
答案 0 :(得分:13)
除非你想要避免foreach
语句之后有一些逻辑,否则这是不必要的,因为它会起到同样的作用。
当foreach
迭代nodesWithRules
时检测到没有项目并退出循环。
答案 1 :(得分:4)
如果这是linq 2 sql,请不要这样做。
您需要额外往返。
此外,如果你有任何其他类型的IEnumerable,你应该避免这种情况。 .net为底层列表做了一些技巧,但你不应该依赖它们。
答案 2 :(得分:0)
在Where之前调用Any是没有意义的。如果Where查询没有返回结果,则永远不会进入for循环。
在实际操作之前调用Any会最终损害性能,因为您正在进行两次查询。