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

C# 将字符串转换为类名并作为参数T传递,c#,generics,C#,Generics,我希望将类的字符串名称转换为类,然后将该类名传递给接受的方法: var objectList=\u reader.GetObjects(); 我调用的方法是: public List<T> GetObjects<T>() where T:new() { } public List GetObjects(),其中T:new(){ } 你知道怎么做吗?我试过: var type = Type.GetType(MyClassName); var yourObject =

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

var objectList=\u reader.GetObjects();
我调用的方法是:

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

}
public List GetObjects(),其中T:new(){
}
你知道怎么做吗?我试过:

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

var objectList = _reader.GetObjects<yourObject>();
var type=type.GetType(MyClassName);
var yourObject=Activator.CreateInstance(类型);
var objectList=_reader.GetObjects();
但这不起作用,我收到错误消息“yourObject是一个变量,但像类型一样使用”

如果我使用一个实际的类名,它确实有效


有什么想法吗?

编译时会解析.NET通用语法
,因此您无法直接执行想要执行的操作。如果您没有对reader类的控制权,那么可以使用反射调用它,如中所述

但是,如果您正在编写reader类,那么我更喜欢这样做:

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));

当然,这假设您可以控制“reader”类。

通过反射调用泛型方法是完全可能的。我更新了文章,以使用反射的可能性进行反射。如果OP控制了reader类,我认为我的答案是有价值的。
var objectList = _reader.GetObjects(Type.GetType(MyClassName));