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)
当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)