我正在编写一个方法扩展库。
例如,我们有扩展方法。
public static T GetRandom<T>(this IEnumerable<T> collection)当集合为null时,哪个异常ArgumentNullException或NullReferenceException将是最清楚的情况?还是别的什么?
发布于 2016-01-17 17:30:14
它是null的参数,所以您应该抛出一个ArgumentNullException。基本上,您不应该直接抛出NullReferenceException --只有在尝试取消引用空值时才会抛出它(自动)。
您正在编写扩展方法这一事实并没有改变一个事实,即它实际上是一个静态方法,而collection是一个参数。
与往常一样,如果使用的是nameof 6,则使用C# 6指定参数的名称为null:
public static T GetRandom<T>(this IEnumerable<T> collection)
{
if (collection == null)
{
throw new ArgumentNullException(nameof(collection));
}
...
}(顺便说一句,请查看MoreLINQ,它很可能已经拥有了您的大多数方法.)
发布于 2016-01-17 17:30:03
你不应该扔NullReferenceException。如果试图访问值为null的对象,框架将引发此异常。
你需要像这样抛出ArgumentNullException:
public static T GetRandom<T>(this IEnumerable<T> collection)
{
if(collection == null)
throw new ArgumentNullException("collection");
//...
}https://stackoverflow.com/questions/34841310
复制相似问题