Автоматический Dispose(); у всех полей класса

140
18 июля 2019, 19:50

На сколько НЕкоректно использовать такую вот "ленивую" конструкцию диспоуза:

protected new void Dispose()
{
    var lst = GetType().GetProperties();
    foreach (var item in lst)
    {
        if (item is IDisposable)
            ((IDisposable)item).Dispose();
    }
    base.Dispose();
}

и почему :)

Если в такой конструкции нету ничего плохого, почему такую конструкцию не используют повсеместно?

Да и почему вообще это не сделать "универсальным" диспоузом который (в теории) не нужно будет переопределять для того, что бы подчищать вручную все?

Answer 1

Как указали в комментариях, GetProperties возвращает массив элементов типа PropertyInfo

Данный тип не реализует интерфейс IDisposable, соответственно проверка

if (item is IDisposable)

всегда ложна и ни у какого поля не вызывается Dispose.

Таким образом: такую конструкцию не используют – потому что она не работает так как ожидается.

READ ALSO
Unity3d C# Translate не работает

Unity3d C# Translate не работает

Translate просто телепортирует объект через две секундыМоя задача сделать движение объекта так: в одну сторону две секунды, в другую сторону...

176
Нажатие клавиш в браузере

Нажатие клавиш в браузере

У меня есть сайт, там я должен проходить регистрацию, я хочу автоматизировать этот процесс

175
Как сделать ссылку на input?

Как сделать ссылку на input?

Хочу сделать чтобы в зависимости от выбранного input отправлялось на нужный метод, Как можно сделать ссылку на этот инпут?

168
Как добавить расширения в Cefsharp?

Как добавить расширения в Cefsharp?

Пару дней назад в cefsharp добавили поддержку расширенийНикакой документации как добавить расширения я не нашел, хотя в коммитах есть инфа

144