ObjectDisposedException
ObjectDisposedException бросают после
Dispose или DisposeAsync. Первый
аргумент конструктора - имя объекта
(objectName), а не произвольный
текст сообщения. Удобная проверка -
ThrowIf.
Синтаксис
throw new ObjectDisposedException(objectName);
Пример
Давайте бросим исключение с именем
"Door" и выведем ObjectName:
using System;
class Program
{
static void Main()
{
try
{
throw new ObjectDisposedException("Door");
}
catch (ObjectDisposedException ex)
{
Console.WriteLine(ex.ObjectName);
}
}
}
Результат выполнения кода:
"Door"
Пример
Давайте поймаем исключение после имитации закрытого ресурса:
using System;
class Door : IDisposable
{
private bool closed;
public void Dispose()
{
closed = true;
}
public void Use()
{
if (closed)
{
throw new ObjectDisposedException("Door");
}
}
}
class Program
{
static void Main()
{
var door = new Door();
door.Dispose();
try
{
door.Use();
}
catch (ObjectDisposedException ex)
{
Console.WriteLine(ex.ObjectName);
}
}
}
Результат выполнения кода:
"Door"
Пример
Давайте обработаем исключение через
catch
и напечатаем маркер:
using System;
class Program
{
static void Main()
{
try
{
throw new ObjectDisposedException("Door");
}
catch (ObjectDisposedException)
{
Console.WriteLine("closed");
}
}
}
Результат выполнения кода:
"closed"
Смотрите также
-
метод
ThrowIf,
который бросает при выполненном условии -
InvalidOperationException,
когда мешает состояние, а не Dispose -
блок
catch,
которым ловят исключение -
ArgumentOutOfRangeException,
где имя объекта задают иначе