Что должно быть передано в качестве имени объекта при создании исключения ObjectDisposedException?

При реализации IDisposable я понимаю, что каждый метод, который не следует вызывать после удаления объекта, должен вызывать ошибку ObjectDisposedException. Но каков стандарт для объекта имени, который следует передать конструктору исключения?


person Wilhelm    schedule 26.12.2009    source источник


Ответы (3)


Я считаю, что рекомендуемая практика заключается в следующем:

throw new ObjectDisposedException(GetType().FullName);

Или включая проверку, эти две строки кода вверху каждого метода, который в ней нуждается (очевидно, не сам метод Dispose):

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

Может быть даже полезно преобразовать это в крошечный метод для удобства использования.

person Noldorin    schedule 26.12.2009
comment
Также см. этот вопрос и мой ответ для общих рекомендаций: stackoverflow.com/questions/668440/ - person Noldorin; 27.12.2009

Даже сама .NET Framework здесь не очень последовательна.

Дэвид М. Кин (бывший разработчик команды FxCop в Microsoft) добавил комментарий к документация MSDN для ObjectDisposedException:

Типичное использование этого типа выглядит примерно так:

[C#]
private void CheckDisposed()
{
    throw new ObjectDisposedException(GetType().FullName);
}
person Albic    schedule 26.12.2009
comment
Я пропустил его. Мут научиться читать комментарии в документации также. - person Wilhelm; 27.12.2009
comment
@JonathonReinhart: комментарий, очевидно, был удален из .NET 4-версии страницы. Я исправил ссылку выше, чтобы она относилась к версии .NET 3.5, которая включает цитируемый комментарий. - person Albic; 30.06.2012

Я не верю, что для этого существует стандарт, я бы вернул тип объекта вместе со строковым содержимым уникального идентификационного поля (своего рода «первичный ключ»).

person Aviad P.    schedule 26.12.2009