如果我不知道T是什么直到运行时,我可以使用反射将对象从类型object
转换为MyType<T>
吗?
不能将强制转换为编译时未知的类型。强制转换实际上只在编译时构造时有用,因为您需要知道类型才能直接使用它。
如果您的目标是通过反射来处理对象,那么情况就不同了。在这种情况下,您可以使用Type。MakeGenericType为对象创建正确的类型。
在这种情况下的技巧是使用具有泛型方法的非泛型类。
public class MyType
{
public T GetResult<T>() {
}
}
但是,请注意,这发生在编译时。泛型使您有机会在编译时创建类型或方法的不同"风格";但是泛型是动态的而不是 !泛型是类型安全的,类型安全只能在编译时实现(因为是编译器检查类型安全)。