检查列表为null时更好:不为null或使用Any

时间:2018-10-05 08:14:18

标签: c# list

检查清单为空时哪个更好?

var newList;

if(newList!= null)

or newList.Any()

在上面的代码中,有时我不检查是否为null,有时我使用Any(),我不知道哪种是最佳实践,为什么?

有什么建议吗?

预先感谢

3 个答案:

答案 0 :(得分:11)

这些不一样。

Any如果用于null引用,将引发异常。

使用列表,您可以将.Any()视为.Count() != 0(*)

您可能必须同时检查两者,并且必须在调用Any()上的IEnumerable之前进行空检查。

一种方法是像Thierry V's answer一样使用null安全导航?.一次检查它们。

但是有时候,如果您有一个不应该具有的空值,则想抛出一个自定义的Exception,并将空列表视为正确的输入,因此这全取决于上下文。

请记住,这些是不同的。

(*):如注释中所述,.Any()实际上未实现为Count() == 0。对于列表,它在功能上是等效的,但最佳实践是使用Any()测试IEnumerable是否为空,因为Count()可能需要遍历所有元素。

答案 1 :(得分:5)

nullAny()具有不同的用途。

Any用于检查列表中是否包含任何项目。

在调用Any之前,您的列表必须不是null,否则,它会引发Null异常。

考虑newList?.Any()

答案 2 :(得分:3)

其他答案说!= nullAny()不同

我会写一个扩展方法来使您期望。

public static class ExtenstionArray
{
    public static bool CheckAny<T>(this IEnumerable<T> list) {
        return list != null && list.Any();
    }
}

然后,您可以更轻松地进行检查。

if(newList.CheckAny())