我有一个项目,必须使用网络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;
}
}
但是你不能。任何关于如何优雅地实现这一需求的想法都将受到赞赏。
斯图。
答案 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);