从String创建模型类名称

时间:2014-05-19 17:19:56

标签: 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.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

我该怎么做?

由于

2 个答案:

答案 0 :(得分:1)

这取决于您想要做什么。

var n1 = entry.Entity as MyClassName1;

基本上做了两件事:

  1. MyClassName1 n1; - 它将n1静态输入为MyClassName1

  2. 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; }


  3. 第一件事情不能动态完成。静态类型在编译时已知

    第二件事可以动态完成

    {{1}}

    ¹...除了少数例外,这可能与此无关。

答案 1 :(得分:0)

Activator.CreateInstance不是一种类型。如果你有某个Entity类,你可以像这样强制转换你的实例:

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