首页 > 解决方案 > 通过字符串初始化泛型类

问题描述

我有一个字符串“MyClass”。有没有办法通过字符串初始化一个通用对象?

public void LoadToCache<T>(string key) where T : class, new()
{
  //string key is a class name like "MyClass"
    using (var bl = new BusinessLayer<key>())
    {
       bl.GetAll();
    }
} 
//---------------------------------------------------------------
public class BusinessLayer<T> where T : class
{
  ..
  ..
}
//---------------------------------------------------------------
public class MyClass
{
  ..
  ..
}

标签: c#.net

解决方案


您可以通过反射从程序集中获取类型并使用Activator.CreateInstance.

我希望这有帮助:

我的课:

public class Car
{

}

方法:

string myClass = "Car";
var types = Assembly.GetExecutingAssembly().GetTypes().ToList();
var myType = types.FirstOrDefault(i => i.IsClass && i.Name == myClass);
var instance  = Activator.CreateInstance((Type) myType);

Console.Write(instance.ToString());

推荐阅读