Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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 - Fatal编程技术网

C# 使用字符串变量设置';类别=新<;类()的字符串>';

C# 使用字符串变量设置';类别=新<;类()的字符串>';,c#,class,C#,Class,我有三个变形类。根据用户输入,该类应设置为该用户的输入。因此,子类由用户决定,应该是“class=newInputClass”。代码片段如下所示: public void characterGeneration(string classSelected) { foreach (string classInList in classes.ClassList) { if (classSelected == classInList)

我有三个变形类。根据用户输入,该类应设置为该用户的输入。因此,子类由用户决定,应该是“class=newInputClass”。代码片段如下所示:

public void characterGeneration(string classSelected)
    {
        foreach (string classInList in classes.ClassList)
        {
            if (classSelected == classInList)
            {
                PlayerOneStats = new Mage();
            }
        }

        PlayerOneStats.generateStats();
    }
上面写着
playeronstats=new Mage()
,我希望
Mage()
作为用户输入


我已经研究了Activator、Assembly、使用Type,试图转换为
GenerateStats
的父级,但没有任何效果。我发现很多人说它有效,但有一个链接说它无效。谁能帮我澄清一下吗?多谢各位

您确定Activator不工作吗
Activator.createInstance(“程序集名称”、“类型名称”)
似乎正是您想要的。什么不起作用?

什么是
Mage
的基类(以及用户可以选择的其他类)?您应该能够做到这一点:

    public void characterGeneration(string classSelected)
    {
        foreach (string classInList in classes.ClassList)
        {
            if (classSelected == classInList)
            {
                PlayerOneStats = (GenerateStats)Assembly.GetExecutingAssembly().CreateInstance("YourNamespace." + classSelected);
                break;
            }
        }

        PlayerOneStats.generateStats();
    }

确保包含所需类型的名称空间,这对您应该有用:

string classSelected = "testCode.Mage";
var player = Activator.CreateInstance(Type.GetType(classSelected));
由于
Activator.CreateInstance()
返回一个
对象
,因此必须强制转换-在您的情况下,强制转换到所有玩家类都实现的接口是有意义的:

var player = (IPlayerCharacter) Activator.CreateInstance(Type.GetType(classSelected));

我需要设置playeronostats=new“类字符串”,当我尝试执行playeronostats=new Activator.CreateInstance(…)时,它告诉我CreateInstance(…)是一个方法,但像类型一样使用。我需要有新的关键字在那里实例化我的(法师/战士/盗贼)类正确吗?啊,我看到这里的问题。不,在使用Activator.CreateInstance时,您不需要使用
new
关键字,我的“程序集名称”和“类型名称”是什么?类型名称是您得到的字符串。程序集名称iis在中定义类型的程序集。PlayerOnStats=new(GenerateStats)Activator.CreateInstance(classSelected);给我'Game.GenerateStats'是一种类型,但像变量一样使用。参数中的'type stat'是什么?请注意。试试我现在放的东西。用你的
Mage
等实际名称空间替换“YourNamespace”。类在其中。谢谢谢谢谢谢!我花了太长时间想弄明白。我有一些属性是通过用户输入提取出来的,但无法计算出类。现在,它已经解决,我在路上完成这个程序。最后一个问题是,您如何比较您如何创建它的结果,以便我可以将这些类与“Activator.CreateInstance(“程序集名称”、“类型名称”)”进行比较。我不知道如何使后者起作用;我不知道程序集名称和类型名称,所以无论如何我都无法让它工作,尽管知道会很好。另外,我可以在某个地方给你一个plus-one代表吗?我是这个网站的新手。