假设我有一个名为str的字符串,其值为某个类的名称。
例如string str="MyClass";
是否可以使用此变量实例化对象或对象列表?
(那是因为我从一开始就不知道我应该创建什么类型的对象,但是在程序中的某个地方我得到了一个带有类名称的字符串列表)
我真正想要的一些虚假的愚蠢代码是:
List<**str**> myList = new List<str>();
或
**str** object = new **str**();
提前Thanx!
答案 0 :(得分:1)
您可以使用反射,假设您的类在同一个程序集中:
string input = "MyClass";
var type = Assembly.GetExecutingAssembly()
.GetTypes()
.FirstOrDefault(t => t.Name == input);
MyClass myObject = (MyClass)Activator.CreateInstance(type);
答案 1 :(得分: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;
}
}
}