在下面的程序中,(!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!");
}
}
}
答案 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 ....