所以根据这个http://msdn.microsoft.com/en-us/library/system.objectdisposedexception.aspx ObjectDisposedException
是:
对已处置对象执行操作时引发的异常。
因此,由于属性 get 不应该改变状态,它并不是真正的“执行操作”。那么是否应该ObjectDisposedException
抛出一个然后有人访问已处置对象上的属性集?
所以根据这个http://msdn.microsoft.com/en-us/library/system.objectdisposedexception.aspx ObjectDisposedException
是:
对已处置对象执行操作时引发的异常。
因此,由于属性 get 不应该改变状态,它并不是真正的“执行操作”。那么是否应该ObjectDisposedException
抛出一个然后有人访问已处置对象上的属性集?
在大多数情况下,处置对象的任何使用都是无效的。因此,抛出一个属性 get 不会是不合理的。
话虽如此,这可能会导致额外的开销,这可能足以阻止 JIT 对 getter 进行内联,因此在实践中,如果 getter 无论如何都会成功,则可能不值得添加处置检查。如果属性 getter 在处理后会失败并抛出,那么我肯定会添加检查,因此异常将有意义并且与类型无关。
那么是否应该抛出 ObjectDisposedException 然后有人访问已处置对象上的属性集?
如果对象已被处置,我绝对认为使用属性设置器是合适的。
我建议,ObjectDisposedException
如果在处理后使用对象,则抛出的必要性并不强,因为不使用这种用法的必要性会导致任何其他异常。在满足后一个要求的情况下,需要确保对象在采取某些操作之前没有被处置,ObjectDisposedException
在使用不当时将其扔掉可能基本上是“免费的”。另一方面,我认为如果一个对象不需要Disposed
关心它是否被处理(例如Enumerable<T>.Empty.GetEnumerator()
应该能够返回一个单例枚举器),那么它应该不需要携带一个标志MoveNext()
总是返回false
而不考虑它是否被处理的实例)。