4 回答
TA贡献1805条经验 获得超9个赞
通常,包括例外在内,您应该将扩展方法视为普通的静态方法。在这种情况下,您应该抛出ArgumentNullException。
由于一些原因,在此处抛出NullReferenceException是一个坏主意
实际上没有发生空引用,因此看到一个是违反直觉的
抛出NullReferenceException并导致NullReferenceException发生会产生明显不同的异常(一种观察差异的方法是错误代码)。对于CLR抛出的许多异常,这都是正确的。
请参阅何时可以捕获StackOverflowException(我在该主题上发表的文章)。
像对待常规方法一样调用扩展方法是完全合法的。在那种情况下,除了NullReferenceException外,我当然不会,而是ArgumentNullException。
TA贡献1995条经验 获得超2个赞
除了所有其他答案(很好)之外,我认为值得一看的是Microsoft为保持一致性所做的事情……据我所知,Enumerable中的扩展方法都抛出ArgumentNullException。
TA贡献1812条经验 获得超5个赞
由于扩展方法可以在C#2.0中使用,并且可以像静态方法一样调用它们(您不必将它们用作扩展方法),因此应使用ArgumentNullException。
仅仅因为它们看起来像类型上的方法并不意味着它们就是它们,或者总是被称为一个。
TA贡献1804条经验 获得超2个赞
ArgumentNullException。有没有需要调用扩展方法,好像它们是实例方法。您可以像调用普通方法一样调用它们。在这种情况下,NullReferenceException将完全不正确。
- 4 回答
- 0 关注
- 522 浏览
添加回答
举报