58

When implementing IDisposable, I undertand that every method that shouldn't be called after the object's been disposed should throw the ObjectDisposedException. But what is the standard for the name object that should be passed to the exception's constructor?

Noldorin
  • 144,213
  • 56
  • 264
  • 302
Wilhelm
  • 1,868
  • 14
  • 21

3 Answers3

56

I believe the recommended practice is to throw the following:

throw new ObjectDisposedException(GetType().FullName);

Or including the check, these two lines of code at the top of each method that needs it (obviously not the Dispose method itself):

if (this.disposed)
    throw new ObjectDisposedException(GetType().FullName);

Might even be helpful to refactor this into a tiny method for usability.

Noldorin
  • 144,213
  • 56
  • 264
  • 302
  • Also, please see this question and my answer for general guidelines: http://stackoverflow.com/questions/668440/handling-objectdisposedexception-correctly-in-an-idisposable-class-hierarchy – Noldorin Dec 26 '09 at 22:28
14

Even the .NET Framework itself isn't very consistent here.

David M. Kean (former developer on the FxCop team at Microsoft) added a comment to the MSDN documentation for the ObjectDisposedException:

The typical usage of this type is something like the following:

[C#]
private void CheckDisposed()
{
    throw new ObjectDisposedException(GetType().FullName);
}
Albic
  • 3,559
  • 4
  • 22
  • 25
  • I missed it. Mut learn to read the comments in the documentation also. – Wilhelm Dec 26 '09 at 22:42
  • 1
    @JonathonReinhart: The comment was obviously removed from the .NET 4-version of the page. I fixed the link above so it refers to the .NET 3.5-version which includes the quoted comment. – Albic Jun 30 '12 at 09:39
  • Might as well do ``throw new ObjectDisposedException(ToString());`` – Scover Jun 13 '23 at 07:46
1

I don't believe there's a standard for that, I would return the type of the object along with the string content of a unique identifying field (a 'Primary Key' of sorts).

Aviad P.
  • 32,036
  • 14
  • 103
  • 124