C# 删除不同类型的对象
我有一个项目,我必须使用web api创建对象的层次结构,类似于数据库。例如,我需要创建数据库的对象类型,其中包含表,而表又包含列。每个对象都是通过调用web服务创建的,然后web服务返回其唯一Id。我通过将每个对象添加到列表中来保留所有这些信息,以防过程中出现错误C# 删除不同类型的对象,c#,object,C#,Object,我有一个项目,我必须使用web api创建对象的层次结构,类似于数据库。例如,我需要创建数据库的对象类型,其中包含表,而表又包含列。每个对象都是通过调用web服务创建的,然后web服务返回其唯一Id。我通过将每个对象添加到列表中来保留所有这些信息,以防过程中出现错误 List<object> dbObjects = new List<object>(); List dbObjects=new List(); 当发生异常并且我需要回滚时,问题就会出现。我需要浏览一下列表
List<object> dbObjects = new List<object>();
List dbObjects=new List();
当发生异常并且我需要回滚时,问题就会出现。我需要浏览一下列表,并尝试一个接一个地删除它们,这就是我的问题的症结所在。除了对象id之外,没有接口或公共性
我想做的是:
foreach (object dbObject in dbObjects )
{
_webApi.DeleteObject <typeof(object)>(object.id);
}
foreach(dbObjects中的对象dbObject)
{
_webApi.DeleteObject(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;
}
}
foreach(dbObjects中的对象dbObject)
{
开关(dbObject.GetType())
{
案例类型(数据库):
数据库db=dbObject作为数据库
_webApi.DeleteObject(db.id);
打破
案例类型(表):
Table db=dbObject作为Table;
_webApi.DeleteObject(db.Id);
打破
违约:
打破
}
}
但你不能。任何关于如何优雅地实现这一需求的想法都将不胜感激
斯图 在同一个列表中有多个不相关的类型有点代码味道,我建议重构您的代码,这样就不会出现这种情况,甚至可以简单地将对象保留在不同的列表中。话虽如此,您可以这样做:
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...");
}
}
foreach(dbObjects中的var dbObject)
{
开关(dbObject)
{
案例数据库数据库:
_webApi.DeleteObject(db.id);
打破
案例表tbl:
_webApi.DeleteObject(tbl.id);
打破
违约:
抛出新异常(“有人向集合中添加了一个奇怪的对象…”);
}
}
在同一个列表中有多个不相关的类型有点代码味道,我建议重构您的代码,这样就不会出现这种情况,甚至可以简单地将对象保留在不同的列表中。话虽如此,您可以这样做:
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...");
}
}
foreach(dbObjects中的var dbObject)
{
开关(dbObject)
{
案例数据库数据库:
_webApi.DeleteObject(db.id);
打破
案例表tbl:
_webApi.DeleteObject(tbl.id);
打破
违约:
抛出新异常(“有人向集合中添加了一个奇怪的对象…”);
}
}
您可以使用hashmap哈希表数据
Hashtable temp = new Hashtable();
temp.Add(object.id, object);
和删除数据,您可以使用删除功能,如:
temp.Remove(object.id);
您可以使用hashmap哈希表数据
Hashtable temp = new Hashtable();
temp.Add(object.id, object);
和删除数据,您可以使用删除功能,如:
temp.Remove(object.id);
列表
不是层次结构,顾名思义,它是一个平面列表。此外,使用对象执行所有操作都完全忽略了强类型必须提供的所有功能。为什么不创建一个列表
,每个数据库
都有一个列表
,每个数据库表
都有一个列表
?这真的很简单,显然我也是!谢谢Peter。列表
不是层次结构,顾名思义,它是一个平面列表。此外,使用对象执行所有操作都完全忽略了强类型必须提供的所有功能。为什么不创建一个列表
,每个数据库
都有一个列表
,每个数据库表
都有一个列表
?这真的很简单,显然我也是!谢谢Peter。谢谢David,这会起作用,但你和Peter的初始陈述是正确的。谢谢David,这会起作用,但你和Peter的初始陈述是正确的。