让我们假设我有一个名为 str 的字符串,其中某个值是类的名称。例如 string str="MyClass";,有没有办法使用这个变量来实例化一个对象或对象列表?
(那是因为我从一开始就不知道我应该创建什么类型的对象,但是在程序内部的某个地方我得到了一个带有类名的字符串列表)
我真正想要的一些愚蠢的代码是:
List<**str**> myList = new List<str>();
或者
**str** object = new **str**();
提前谢谢!
让我们假设我有一个名为 str 的字符串,其中某个值是类的名称。例如 string str="MyClass";,有没有办法使用这个变量来实例化一个对象或对象列表?
(那是因为我从一开始就不知道我应该创建什么类型的对象,但是在程序内部的某个地方我得到了一个带有类名的字符串列表)
我真正想要的一些愚蠢的代码是:
List<**str**> myList = new List<str>();
或者
**str** object = new **str**();
提前谢谢!
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);
您可以基于以下代码构建您的代码,它根据其名称构造一个 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;
}
}
}