0

让我们假设我有一个名为 str 的字符串,其中某个值是类的名称。例如 string str="MyClass";,有没有办法使用这个变量来实例化一个对象或对象列表?

(那是因为我从一开始就不知道我应该创建什么类型的对象,但是在程序内部的某个地方我得到了一个带有类名的字符串列表)

我真正想要的一些愚蠢的代码是:

List<**str**> myList = new List<str>();

或者

**str** object = new **str**();

提前谢谢!

4

2 回答 2

1

You can use reflection, assume your class is in the same assembly:

string input = "MyClass";

var type = Assembly.GetExecutingAssembly()
                   .GetTypes()
                   .FirstOrDefault(t => t.Name == input);

MyClass myObject = (MyClass)Activator.CreateInstance(type);
于 2013-04-04T15:46:50.107 回答
0

您可以基于以下代码构建您的代码,它根据其名称构造一个 MyClass 的实例:

namespace MyNameSpace {

    public class MyClass {
        public MyClass() {
            // initialise
        }

        public static MyClass CreateMyClassFromName() {
            Type myType = Type.GetType("MyNameSpace.MyClass");
            System.Reflection.ConstructorInfo constinfo = myType.GetConstructor(new Type[] { });
            MyClass mc = (MyClass)constinfo.Invoke(null);
            return mc;
        }

    }

}
于 2013-04-04T16:02:46.667 回答