C# 当检查列表为空时,哪一个更好:不为空或使用任何
当检查列表为空时,哪个更好C# 当检查列表为空时,哪一个更好:不为空或使用任何,c#,list,C#,List,当检查列表为空时,哪个更好 var newList; if(newList!= null) or newList.Any() 在上面的代码中,有时我检查NOTNULL,有时我使用Any(),我不知道哪一个是最佳实践,为什么 有什么建议吗 提前感谢null和Any()有不同的用途 Any用于检查列表中是否包含任何项目 在调用Any之前,您的列表必须不是null,它不是,它抛出null异常 想一想新列表?.Any()它们是不一样的 Any如果在null引用上使用,将引发异常 使用列表,您可以将
var newList;
if(newList!= null)
or newList.Any()
在上面的代码中,有时我检查NOTNULL,有时我使用Any(),我不知道哪一个是最佳实践,为什么
有什么建议吗
提前感谢
null
和Any()
有不同的用途
Any
用于检查列表中是否包含任何项目
在调用Any
之前,您的列表必须不是null
,它不是,它抛出null异常
想一想新列表?.Any()它们是不一样的
Any
如果在null
引用上使用,将引发异常
使用列表,您可以将.Any()
视为.Count()!=0
(*)
您可能必须同时检查这两个参数,并且在调用IEnumerable
上的Any()
之前必须执行空检查
一种方法是使用空安全导航检查它们,如中所示
但有时,如果您有一个不应该有的空值,您希望抛出一个自定义异常,并将空列表视为正确的输入,因此这一切都取决于上下文
只要记住这些是不同的
(*):正如注释中所注意到的,
.Any()
实际上并没有实现为Count()==0
。对于列表,它在功能上是等效的,但最好使用Any()
来测试IEnumerable
是否为空,因为Count()
可能需要遍历所有元素。正如其他答案所说的!=null
和Any()
是不同的
我会写一个扩展方法,让你期待
public static class ExtenstionArray
{
public static bool CheckAny<T>(this IEnumerable<T> list) {
return list != null && list.Any();
}
}
最佳实践是不要在代码中留下bug<如果
newList
实际上是Null
你不能使用newList,那么code>Any()
将抛出Null异常。Any()如果nesList
是Null
。可能重复。我不明白为什么这类问题会在这些天被投票,甚至被投票。总的来说,对于不是List
s的序列,Count()!=0
与Any()
不同,它滚动整个序列以计算项目数(可能是无限的!),然后将其与0进行比较Any()
,而是在找到项或序列为空时立即返回。@LucaCremonesi确实如此。谢谢你的评论。为了正确起见,我试图在答案中阐述这一点。如果你想看到更好的措辞,请随意编辑。
if(newList.CheckAny())