2016-11-28 67 views
0

我在寻找一类的字符串名称转换为一类,然后传递类名到接受<T>的方法:字符串转换为类的名称,并通过作为参数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>(); 

,但不工作,我得到的错误信息“yourObject是一个变量,但像使用类型为”

它的工作,如果我用一个实际的类名。

任何想法?

回答

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

当然,这是假设你在你的“读者”级控制。

+0

绝对可以通过反射调用泛型方法。 – Rob

+0

我更新了帖子以反映使用反射的可能性。我认为如果OP能够控制读者类别,我的答案就很有价值。 –

相关问题