首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择ArgumentNullException还是NullReferenceException

选择ArgumentNullException还是NullReferenceException
EN

Stack Overflow用户
提问于 2016-01-17 17:27:59
回答 2查看 94关注 0票数 0

我正在编写一个方法扩展库。

例如,我们有扩展方法。

代码语言:javascript
复制
public static T GetRandom<T>(this IEnumerable<T> collection)

当集合为null时,哪个异常ArgumentNullExceptionNullReferenceException将是最清楚的情况?还是别的什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-17 17:30:14

它是null的参数,所以您应该抛出一个ArgumentNullException。基本上,您不应该直接抛出NullReferenceException --只有在尝试取消引用空值时才会抛出它(自动)。

您正在编写扩展方法这一事实并没有改变一个事实,即它实际上是一个静态方法,而collection是一个参数。

与往常一样,如果使用的是nameof 6,则使用C# 6指定参数的名称为null:

代码语言:javascript
复制
public static T GetRandom<T>(this IEnumerable<T> collection)
{
    if (collection == null)
    {
        throw new ArgumentNullException(nameof(collection));
    }
    ...
}

(顺便说一句,请查看MoreLINQ,它很可能已经拥有了您的大多数方法.)

票数 5
EN

Stack Overflow用户

发布于 2016-01-17 17:30:03

你不应该扔NullReferenceException。如果试图访问值为null的对象,框架将引发此异常。

你需要像这样抛出ArgumentNullException

代码语言:javascript
复制
public static T GetRandom<T>(this IEnumerable<T> collection)
{
    if(collection == null)
        throw new ArgumentNullException("collection");
    //...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34841310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档