检查清单为空时哪个更好?
var newList;
if(newList!= null)
or newList.Any()
在上面的代码中,有时我不检查是否为null,有时我使用Any(),我不知道哪种是最佳实践,为什么?
有什么建议吗?
预先感谢
答案 0 :(得分:11)
这些不一样。
Any
如果用于null
引用,将引发异常。
使用列表,您可以将.Any()
视为.Count() != 0
(*)
您可能必须同时检查两者,并且必须在调用Any()
上的IEnumerable
之前进行空检查。
一种方法是像Thierry V's answer一样使用null安全导航?.
一次检查它们。
但是有时候,如果您有一个不应该具有的空值,则想抛出一个自定义的Exception,并将空列表视为正确的输入,因此这全取决于上下文。
请记住,这些是不同的。
(*):如注释中所述,.Any()
实际上未实现为Count() == 0
。对于列表,它在功能上是等效的,但最佳实践是使用Any()
测试IEnumerable
是否为空,因为Count()
可能需要遍历所有元素。
答案 1 :(得分:5)
null
和Any()
具有不同的用途。
Any
用于检查列表中是否包含任何项目。
在调用Any
之前,您的列表必须不是null
,否则,它会引发Null异常。
考虑newList?.Any()
答案 2 :(得分:3)
其他答案说!= null
和Any()
不同
我会写一个扩展方法来使您期望。
public static class ExtenstionArray
{
public static bool CheckAny<T>(this IEnumerable<T> list) {
return list != null && list.Any();
}
}
然后,您可以更轻松地进行检查。
if(newList.CheckAny())