我正在尝试将现有的模型类名称动态插入到声明中,因此我不必这样做:
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
我该怎么做?
由于
答案 0 :(得分:1)
这取决于您想要做什么。
var n1 = entry.Entity as MyClassName1;
基本上做了两件事:
MyClassName1 n1;
- 它将n1
静态输入为MyClassName1
。
n1 = (entry.Entity is MyClassName1 ? (MyClassName1)entry.Entity : null);
- 如果null
不属于n1
¹,则会将MyClassName1
分配给if (GetType(typeNameAsString).IsAssignableFrom(entry.Entity.GetType()) {
n1 = entry.Entity;
} else {
n1 = null;
}
。
第一件事情不能动态完成。静态类型在编译时已知 。
第二件事可以动态完成:
{{1}}
¹...除了少数例外,这可能与此无关。
答案 1 :(得分:0)
Activator.CreateInstance不是一种类型。如果你有某个Entity类,你可以像这样强制转换你的实例:
var n = (Entity)(Activator.CreateInstance(t));