C# 从字符串创建模型类名
我正在尝试将现有模型类名动态插入到声明中,因此不必执行以下操作:C# 从字符串创建模型类名,c#,class,activator,C#,Class,Activator,我正在尝试将现有模型类名动态插入到声明中,因此不必执行以下操作: 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.Crea
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));
var n1 = entry.Entity as MyClassName1;
获取以下错误:
Only assignment, call, increment, decrement and new object expressions can be used as a statement
我该怎么做
谢谢Activator.CreateInstance不是一种类型。如果您在某个地方有一个实体类,您可以像这样强制转换您的实例:
var n = (Entity)(Activator.CreateInstance(t));
这取决于你想做什么。
//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));
var n1 = entry.Entity as MyClassName1;
基本上做两件事:
myclassname1n1代码>--它静态地将n1
键入MyClassName1
n1=(entry.Entity为MyClassName1?(MyClassName1)entry.Entity:null)代码>--如果它不是MyClassName1
类型,则将null
赋值给n1
第一件事不能动态完成。静态类型在编译时已知 第二件事可以动态完成:
if (GetType(typeNameAsString).IsAssignableFrom(entry.Entity.GetType()) {
n1 = entry.Entity;
} else {
n1 = null;
}
➣除了少数例外情况,这些可能与本文无关。这听起来像是XY问题的一个例子。通过这样做,你想要解决的实际问题是什么?这闻起来很难闻。你为什么要这么做<代码>实体已经有一个类型,基础类型
var
将已经匹配正确的类型。Activator.CreateInstance(t)
将创建类型为t的对象的新实例。这是一个对象,而不是一种类型,这就是(一个原因)您不能在as
的RHS上使用它的原因。谢谢您的解释。非常感谢