当方法尝试使用可以为null的字段时抛出哪个exception?

我实际上正致力于框架开发,这意味着需要一种非常强大的编码方法。

我遇到一个问题,我不知道我需要抛出哪个System.Exception派生类。 基本上就是这种情况,当我有一个类,其中的字段可以由构造函数初始化,并且具有使用这些字段的方法。 如果用户没有初始化这些字段,我必须抛出哪个例外? (这意味着它们为空)

这是一个例子:

public class MyConnection { private Uri endpointUri; public Uri EndpointUri { get { return this.endpointUri; } set { this.endpointUri = value; } } public MyConnection() { } public MyConnection(Uri endpointUri) { this.endpointUri = endpointUri; } public FileStream GetFile() { if (this.endpointUri != null) { // My doer methods } else { throw new TheExceptionINeedToThrow("endpointUri", ...); } } } 

请注意,我一直在阅读有关exception处理和抛出的整个“框架设计指南”章节,并且我没有找到适合这种情况的任何解决方案。 或许我误解了一些事情……

谢谢你的帮助。

编辑:我提供一个空构造函数的事实似乎有点混乱我的问题,但它是完全自愿的。 在一些必须符合一系列不能在多个对象中复制的不同状态的对象中,它有时是有用的。

抛出InvalidOperationException

方法调用对于对象的当前状态无效时引发的exception。

注意,null引用没有被传递给方法 – 它在调用方法时已经存在 – 所以它是对象的当前状态,它是无效的,而不是参数。

但是,最好是以这种方式阻止以这种方式创建对象,如果可能的话 – 它是否必须是可写属性? 您是否想要一个具有空端点URI的实例?

NullReferenceExceptionInvalidArgumentExecptionApplicationException都可以,只要exception描述清楚地说明它是什么是null。

像其他人一样,我会推荐InvalidOperationException(因为John Skeet说的):)

如果你使用null参数调用函数,那么我将使用

ArgumentNullException