我正在编写一个方法扩展的小库。
例如我们有扩展方法
public static T GetRandom<T>(this IEnumerable<T> collection)
当collection为null时,哪个异常 ArgumentNullException 或 NullReferenceException 最明显?或其他什么?
答案 0 :(得分:5)
这是null的参数,所以你应该抛出ArgumentNullException
。你基本上不应该直接抛出NullReferenceException
- 它只会在你试图取消引用空值时被自动抛出。
您正在编写扩展方法这一事实并未改变这样一个事实:它确实是一个静态方法,而collection
是一个参数。
像往常一样,如果您使用的是C#6,请使用nameof
指定参数的名称为null:
public static T GetRandom<T>(this IEnumerable<T> collection)
{
if (collection == null)
{
throw new ArgumentNullException(nameof(collection));
}
...
}
(顺便说一句,请查看MoreLINQ,这可能已经包含了大部分方法......)
答案 1 :(得分:3)
你永远不应该抛出NullReferenceException
。如果您尝试访问具有值null
的对象,则会抛出此异常。
你需要像这样抛出ArgumentNullException
:
public static T GetRandom<T>(this IEnumerable<T> collection)
{
if(collection == null)
throw new ArgumentNullException("collection");
//...
}