Any() 扩展方法是否处理空值?

Does Any() extension method handle null values?

在下面的程序中,(!testlist.Any()) 抛出一个参数为空的异常。默认情况下 Any() 扩展方法不处理空值吗?

正确的做法是什么?当 List<int> 用作方法中的参数时,是否应在 Any() 之前添加空检查?

public class Program
    {
        public static void Main(string[] args)
        {

            Console.WriteLine("Hello, world!");

            foo(null);
         }

        public static void foo(List<int> testlist)
        {
            if (!testlist.Any())
            {
                Console.WriteLine("testlist is empty!");
            }
        }
    }

Should a null check be added before Any() when List is used as a parameter in a method ?

是的,这是正确的方法。该方法应该快速失败并显示有意义的消息。

public static void foo(List<int> testlist)
{
    if(testlist == null) 
        throw new ArgumentNullException(nameof(testlist), $"{nameof(testlist)} must not be null");
    if (!testlist.Any())
    {
        Console.WriteLine("testlist is empty!");
    }
}

当然Enumerable.Any不为您处理。 null 传递给此方法可能是一个错误,或者它可能是一个可行的选项。 只有你知道.

异常也是documented

"ArgumentNullException: source is null."

如果不想抛出又想接受null,只处理​​这种情况:

if(testlist == null || !testlist.Any()) 
{ 
    Console.WriteLine("testlist is null or empty!");
}
else ....