从字符串创建模型类名
本文关键字:模型 创建 字符串 | 更新日期: 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;
基本上做两件事:
MyClassName1 n1;
——它静态地将n1
类型为MyClassName1
。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));