抛出ObjectDisposedException时应该作为objectName传递什么?

Wil*_*elm 45 .net idisposable objectdisposedexception

在实现IDisposable时,我认为在对象被处理后不应该调用的每个方法都应该抛出ObjectDisposedException.但是应该传递给异常构造函数的name对象的标准是什么?

Nol*_*rin 47

我相信建议的做法是抛出以下内容:

throw new ObjectDisposedException(GetType().FullName);
Run Code Online (Sandbox Code Playgroud)

或者包括检查,这两行代码位于每个需要它的方法的顶部(显然不是Dispose方法本身):

if (this.disposed)
    throw new ObjectDisposedException(GetType().FullName);
Run Code Online (Sandbox Code Playgroud)

甚至可能有助于将其重构为可用性的微小方法.


Alb*_*bic 12

甚至.NET Framework本身也不是很一致.

David M. Kean(微软FxCop团队的前开发人员)在MSDN文档中添加了对ObjectDisposedException的评论:

此类型的典型用法如下所示:

[C#]
private void CheckDisposed()
{
    throw new ObjectDisposedException(GetType().FullName);
}
Run Code Online (Sandbox Code Playgroud)