Удаление объектов разных типов - PullRequest
0 голосов
/ 01 марта 2019

У меня есть проект, в котором я должен создать иерархию объектов с использованием веб-API, сродни базе данных, например, мне нужно создать типы объектов базы данных, которые будут содержать таблицы, которые, в свою очередь, будут содержать столбцы.Каждый объект создается путем вызова веб-службы, которая затем возвращает свой уникальный идентификатор.Я сохраняю всю эту информацию, добавляя каждый объект в список на случай, если в процессе возникнет ошибка.

List<object> dbObjects = new List<object>();

Проблема возникает, когда возникает исключение, и мне нужно выполнить откат.Мне нужно просмотреть список и попытаться удалить их один за другим, где мой запрос поднимает свою уродливую голову.Нет никаких интерфейсов или общности, кроме идентификатора объекта.

Я бы хотел сделать следующее:

    foreach (object dbObject in dbObjects )
    {
        _webApi.DeleteObject <typeof(object)>(object.id);
    }

Но вы не можете или даже:

foreach (object dbObject in dbObjects)
{
    switch (dbObject.GetType())
    {
        case typeof(Database):
            Database db = dbObject as Database 
            _webApi.DeleteObject <Database>(db.id);
            break;
        case typeof(Table):
            Table db = dbObject as Table;
            _webApi.DeleteObject<Table>(db.Id);
            break;
        default:
            break;
    }
}

но вы не можете.Будем очень благодарны за любые идеи о том, как изящно реализовать этого ребенка требования.

Stu.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

вы можете использовать hashmap Hashtable data, например,

Hashtable temp = new Hashtable();
temp.Add(object.id, object);

и удалять данные, вы можете использовать функцию удаления, например:

temp.Remove(object.id);
0 голосов
/ 01 марта 2019

Наличие нескольких несвязанных типов в одном и том же списке немного пахнет кодом, я бы посоветовал реорганизовать ваш код, чтобы это было не так, даже, например, просто удерживая объекты в отдельных списках.Сказав это, вы можете сделать что-то вроде этого:

foreach (var dbObject in dbObjects)
{
    switch (dbObject)
    {
        case Database db:
            _webApi.DeleteObject<Database>(db.id);
            break;

        case Table tbl:
            _webApi.DeleteObject<Table>(tbl.id);
            break;

        default:
            throw new Exception("Someone added a weird object to the collection...");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...