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 ....
在下面的程序中,(!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 ....