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

时间:2016-07-01 10:51:03

标签: c# .net list int extension-methods

在下面的程序中,(!testlist.Any())抛出一个参数null异常。 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!");
            }
        }
    }

1 个答案:

答案 0 :(得分:7)

  

当List用作a时,应该在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!");
    }
}

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

例外也是documented

  

ArgumentNullException:来源为空。”

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

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