将字符串转换为类名并作为参数T传递

时间:2016-11-28 00:36:12

标签: c# generics

我希望将类的字符串名称转换为类,然后将该类名称传递给接受<T>的方法:

var objectList = _reader.GetObjects<MyClassName>();

我正在调用的方法是:

public List<T> GetObjects<T>() where T:new() {

}

你知道怎么做吗?我试过了:

var type = Type.GetType(MyClassName);
var yourObject = Activator.CreateInstance(type);

var objectList = _reader.GetObjects<yourObject>();

但是这不起作用,我收到错误消息'你的对象是一个变量但是像一个类型一样使用'

如果我使用实际的类名,它确实有用。

有什么想法吗?

1 个答案:

答案 0 :(得分:-2)

.NET通用语法<T>在编译时解析,因此您无法直接执行您想要执行的操作。如果您无法控制您的读者类,那么您可以使用How do I use reflection to call a generic method?

中所述的反射来调用它

但是,如果您正在编写读者课程,那么我更喜欢这样做:

public List<T> GetObjects<T>() where T : class
{
    return GetObjects(typeof(T)).Cast<T>();
}

public List GetObjects(Type type)
{
    ...
}

现在,如果您在运行时只有一个字符串,则可以像这样调用第二个表单:

var objectList = _reader.GetObjects(Type.GetType(MyClassName));

当然,这假设您可以控制您的读者&#39;类。