使用反射转换为通用类型对象

时间:2011-12-12 17:07:37

标签: c# generics reflection

如果在运行时间之前我不知道T是什么,我可以使用反射将类型从object转换为MyType<T>吗?

2 个答案:

答案 0 :(得分:5)

在编译时,您无法强制转换类型为未知类型。 Casting实际上只用作编译时构造,因为你需要知道类型才能直接使用它。

如果你的目标是通过Reflection使用对象,那么这是一个不同的场景。在这种情况下,您可以使用Type.MakeGenericType为对象创建正确的类型。

这将允许您使用反射来处理对象。

答案 1 :(得分:1)

在这种情况下的诀窍是使用具有泛型方法的非泛型类。

public class MyType
{
    public T GetResult<T>() {
    }
}

但请注意,这是在编译时发生的。泛型使您有机会在编译时创建类型或方法的不同“风格”;但是仿制药动态!泛型是类型安全的,类型安全只能在编译时实现(因为它是检查类型安全的编译器)。