从字符串创建模型类名

本文关键字:模型 创建 字符串 | 更新日期: 2023-09-27 18:04:17

我正在尝试将现有的模型类名动态插入到声明中,这样我就不必这样做:

var n1 = entry.Entity as MyClassName1;
var n2 = entry.Entity as MyClassName2; 
var n3 = entry.Entity as MyClassName3; 
[n4...n200]

这是我试图实现的,但使用动态生成的类名

 var n = entry.Entity as MyClassName1;

根据我读到的关于Activator的内容,以下是我如何努力实现这一目标。CreateInstance

 //Get string representation of the class name
 var tableNameStr = entry.EntitySet.Name.TrimEnd('s');
 //Get class type
 var t = Type.GetType(tableNameStr);
 //Instantiate
 var n = entry.Entity as (Activator.CreateInstance(t));

获得以下错误:

Only assignment, call, increment, decrement and new object expressions can be used as a statement

我该怎么做?

感谢

从字符串创建模型类名

这取决于你想做什么。

var n1 = entry.Entity as MyClassName1;

基本上做两件事:

  1. MyClassName1 n1;——它静态地将n1类型为MyClassName1

  2. n1 = (entry.Entity is MyClassName1 ? (MyClassName1)entry.Entity : null);——如果不是MyClassName1的类型,则它将null分配给n1


第一件事不能动态完成静态类型在编译时被称为

第二件事可以动态完成

if (GetType(typeNameAsString).IsAssignableFrom(entry.Entity.GetType()) {
    n1 = entry.Entity;
} else {
    n1 = null;
}

cco。。。除了一些例外,这些可能在这里无关紧要。

激活器。CreateInstance不是类型。如果你在某个地方有一个实体类,你可以像这样投射你的实例:

var n = (Entity)(Activator.CreateInstance(t));