我希望将类的字符串名称转换为类,然后将该类名称传递给接受<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>();
但是这不起作用,我收到错误消息'你的对象是一个变量但是像一个类型一样使用'
如果我使用实际的类名,它确实有用。
有什么想法吗?
答案 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;类。