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?
Asked
Active
Viewed 5,383 times
58
3 Answers
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
-
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