检查扩展方法的输入参数

时间:2009-11-16 13:28:06

标签: .net exception-handling

  

可能重复:
  ArgumentNullException or NullReferenceException from extension method?

应该抛出哪个异常?

public static string DoStuff(this Control control)
{
    if (control == null)
    {
        throw new ArgumentNullException(); 
    }

    // Code goes here...
}

我想到了以下内容:

  1. ArgumentNullException(如下所用)
  2. 出现InvalidOperationException
  3. 的NullReferenceException
  4. 我的选择是ArgumentNullException。这是对的吗?

2 个答案:

答案 0 :(得分:4)

是的,在{IMO}这里做ArgumentNullException是正确的。它仍然是一个参数,即使它可以用作扩展方法。

特别是,这就是LINQ to Objects所做的事情,例如使用the Select method(以及所有其他Enumerable扩展方法)。我说,请关注微软的领导。

编辑:我刚刚发现这是this question的副本,得到了贾里德帕森斯的回答。幸运的是,答案与我同意;)

答案 1 :(得分:0)

我会抛出NullReferenceException,因为这是普通实例方法抛出的内容。我希望我的扩展方法感觉像普通的实例方法。