如何基于类型强制转换基类

本文关键字:转换 基类 何基于 类型 | 更新日期: 2023-09-27 18:35:24

有人请建议如何做下面的场景。

我有一个案例类名 BaseData 和名为 DerivedData 的派生类

Type classtype=Assembly.GetAssembly(typeof(BaseData)).GetType("DerivedData");
BaseData baseobject=  Activator.CreateInstance(classtype) as BaseData;

现在我想将 BaseData 转换为派生数据,如下所示。

注意:(baseobject.getType()) 是无效的语法。

DerivedData objderived= (baseobject.getType())baseobject;

已编辑:我正在尝试删除if条件,因为BaseData获得了多个派生数据。

if (baseobject is DerivedData1)
{
  db.Set<DerivedData1>().Add((DerivedData1)data);
}
else if (data is DerivedData2)
{
  db.Set<DerivedData2>().Add((DerivedData2)data);
}
else if (data is DerivedData3)
{
  db.Set<DerivedData3>().Add((DerivedData3)data);
}

如何基于类型强制转换基类

根据您的编辑,并假设:

  • dbDbContext;
  • BaseData层次结构仅存在于代码级别(因此,从 BaseData 派生的类型不在 EF 模型点的 TPH、TPT 或 TPCT 层次结构中);

只需使用非通用 API:

var baseobject = // create BaseData descendant somehow;
db.Set(baseobject.GetType()).Add(baseobject);

如果你可以通过直接引用它来到达BaseData,你也可以到达DrivedData吗?

Type classtype = Assembly.GetAssembly(typeof(DerivedData)).GetType("DerivedData");
DerivedData dreivedobject =  Activator.CreateInstance(classtype) as DerivedData;