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

now*_*ed. 1 .net c# int extension-methods list

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

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

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!");
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 7

当List用作方法中的参数时,是否应在Any()之前添加空检查?

是的,这是正确的方法.该方法应该通过有意义的消息快速失败.

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!");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

例外也有记录:

" ArgumentNullException:source为null."

如果您不想抛出它但想要接受null,只需处理这种情况:

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