我一直在查看一些我重构的代码,它使用了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#是否有与此相关的最佳实践。
干杯, 杰米
答案 0 :(得分:1)
您可以做的唯一检查是检查items
是否为空,正如您已经说过的那样。但是如果你处理这种情况,你应该记住考虑其他条件以及你的应用程序应该如何应对那种情况。
除此之外,如果您只想迭代它们,则无需检查列表中是否有项目。
答案 1 :(得分:1)
抱歉,我无法说出Linq / C#的最佳做法,但我会在ForEach之前分享我对Any的使用的看法
然而,函数中的一些其他代码使用了 执行ForEach()的任何()检查。
在Any()
之前使用ForEach()
将被动地抑制空引用异常并继续我们的操作。这似乎很好但实际上代码允许其他人发送空值。
我通常将Debug.Assert(!= null)用于可能注入空值的位置。这样就可以在单元测试中捕获这些错误,并确保那些调用此代码的人会收到通知,并且不会允许破坏此代码。因为如果容忍null,我们就不会解决根本原因 - 我们需要在适当的位置初始化对象。