|
45
|
| Patrik Hägne · 技术社区 · 17 年前 |
|
1
39
一般来说,包括异常在内,您应该将扩展方法视为正常的静态方法。在这种情况下,您应该抛出ArgumentNullException。 在这里抛出NullReferenceException是一个坏主意,原因有几个
看见 When can you catch a StackOverflowException (我写的一篇关于这个主题的文章)。
|
|
|
2
27
除了所有其他答案(都很好),我认为微软为了保持一致性所做的工作值得一看。..和Enumerable中的扩展方法都抛出ArgumentNullException。 |
|
|
3
7
由于扩展方法可以在C#2.0中使用,并且可以像静态方法一样调用它们(您不必将它们用作扩展方法),因此应该使用ArgumentNullException。 仅仅因为他们 看 类型上的like方法并不意味着它们是,或者总是被称为like方法。 |
|
|
4
3
从用户的角度来看,该方法看起来和行为都像一个实例方法,所以如果我是他们,我希望看到一个NullReferenceException。 也就是说,我建议在代码中明确地抛出一个或另一个,而不是像第一个例子那样“碰巧”抛出一个。 |
|
|
5
2
ArgumentNullException。这是 不 要求调用扩展方法,就像它们是实例方法一样。你可以像调用普通方法一样调用它们。在这种情况下,NullReferenceException是完全不正确的。 |
|
6
0
更令人困惑的是,微软两者都做了,抛出
这个例子抛出了一个隐含
这个扩展方法抛出一个
正如上面的评论中提到的,我建议将扩展方法完全实现为实例方法,因此抛出一个
和
它们看起来相似,行为也应该相似,程序员甚至不需要知道它是实例还是扩展方法。 |