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())