3

所以根据这个http://msdn.microsoft.com/en-us/library/system.objectdisposedexception.aspx ObjectDisposedException是:

对已处置对象执行操作时引发的异常。

因此,由于属性 get 不应该改变状态,它并不是真正的“执行操作”。那么是否应该ObjectDisposedException抛出一个然后有人访问已处置对象上的属性集?

4

2 回答 2

3

在大多数情况下,处置对象的任何使用都是无效的。因此,抛出一个属性 get 不会是不合理的。

话虽如此,这可能会导致额外的开销,这可能足以阻止 JIT 对 getter 进行内联,因此在实践中,如果 getter 无论如何都会成功,则可能不值得添加处置检查。如果属性 getter 在处理后会失败并抛出,那么我肯定会添加检查,因此异常将有意义并且与类型无关。

那么是否应该抛出 ObjectDisposedException 然后有人访问已处置对象上的属性集?

如果对象已被处置,我绝对认为使用属性设置器是合适的。

于 2013-08-05T23:39:17.307 回答
0

我建议,ObjectDisposedException如果在处理后使用对象,则抛出的必要性并不强,因为不使用这种用法的必要性会导致任何其他异常。在满足后一个要求的情况下,需要确保对象在采取某些操作之前没有被处置,ObjectDisposedException在使用不当时将其扔掉可能基本上是“免费的”。另一方面,我认为如果一个对象不需要Disposed关心它是否被处理(例如Enumerable<T>.Empty.GetEnumerator()应该能够返回一个单例枚举器),那么它应该不需要携带一个标志MoveNext()总是返回false而不考虑它是否被处理的实例)。

于 2013-08-05T23:50:00.653 回答