Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串创建模型类名_C#_Class_Activator - Fatal编程技术网

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上使用它的原因。谢谢您的解释。非常感谢