删除不同类型的对象

时间:2019-03-01 12:27:30

标签: c# object

我有一个项目,必须使用网络api(类似于数据库)创建对象层次结构。我需要创建数据库的对象类型,该对象类型将包含表,而表又包含列。每个对象都是通过调用Web服务创建的,然后调用其唯一ID。我会通过将每个对象添加到列表中来保留所有这些信息,以防万一过程中出现错误。

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

问题发生在发生异常并且我需要回滚时。我需要遍历该列表,并尝试将其一一删除,这是我的查询抬起头的地方。除了对象ID,没有接口或通用性。

我想做的是:

    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;
    }
}

但是你不能。任何关于如何优雅地实现这一需求的想法都将受到赞赏。

斯图。

2 个答案:

答案 0 :(得分:1)

在同一列表中有多个不相关的类型有点代码味道,我建议您重构代码,以免发生这种情况,甚至简单地将对象保留在不同的列表中。话虽如此,您可以执行以下操作:

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...");
    }
}

答案 1 :(得分:-1)

您可以使用hashmap Hashtable数据,

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

并删除数据,您可以使用删除功能,例如:

temp.Remove(object.id);