是否有任何一点在每个之前调用Any()?

时间:2014-10-23 10:44:06

标签: c# coding-style

我一直在查看一些我重构的代码,它使用了null对象模式,因此如果为null,它将始终返回一个空列表。

然而,函数中的一些其他代码使用Any()检查来执行ForEach()。

这样做有什么好处吗?

e.g。

var items = new List<items>

items.AddRange(GetItems(1))

if (items.Any())
{
   items.ForEach(item => { // Do something with item });
}

我意识到只要不需要空值保护这是安全的,但我想知道LINQ和C#是否有与此相关的最佳实践。

干杯, 杰米

2 个答案:

答案 0 :(得分:1)

您可以做的唯一检查是检查items是否为空,正如您已经说过的那样。但是如果你处理这种情况,你应该记住考虑其他条件以及你的应用程序应该如何应对那种情况。

除此之外,如果您只想迭代它们,则无需检查列表中是否有项目。

答案 1 :(得分:1)

抱歉,我无法说出Linq / C#的最佳做法,但我会在ForEach之前分享我对Any的使用的看法

  

然而,函数中的一些其他代码使用了   执行ForEach()的任何()检查。

Any()之前使用ForEach()将被动地抑制空引用异常并继续我们的操作。这似乎很好但实际上代码允许其他人发送空值。

我通常将Debug.Assert(!= null)用于可能注入空值的位置。这样就可以在单元测试中捕获这些错误,并确保那些调用此代码的人会收到通知,并且不会允许破坏此代码。因为如果容忍null,我们就不会解决根本原因 - 我们需要在适当的位置初始化对象。