我正在使用Type
类获得Assembly
,如下所示:
var asm = Assembly.GetAssembly(typeof(MyAssembly));
var t=asm.GetType("FULLY QUALIFIED CLASS NAME", true, true);
然后我从这种类型创建对象:
var obj = Activator.CreateObject(t, new []{ params });
现在我想将此对象转换或转换为Generic
对象(实际上是SubSonic Active Record Object)。
var record = (ActiveRecord<PUT SOMEHOW TYPE t HERE>)obj;
我该如何做到这一点?
答案 0 :(得分:3)
静态输入的要点是您在编译时知道类型。
您期望record
变量的类型是什么?编译器需要知道 - 它不能等到执行时间。
你想对record
做什么?如果真正的目标是创建ActiveRecord<T>
对象,但您不需要知道任何其他操作的T,那么您需要使用Type.MakeGenericType
或MethodInfo.MakeGenericMethod
取决于在ActiveRecord
API(我不熟悉)...但是你不能在代码行中以静态类型的方式(取决于T)使用结果跟随。
ActiveRecord<T>
是否实现了非通用接口?如果是这样,那就是构建相关实例后通常使用的内容。
如果您可以提供指向ActiveRecord<T>
文档的链接以显示如何构建实例,我很乐意为您编写反射代码...
答案 1 :(得分:0)
您的类必须继承ActiveRecord或本身是ActiveRecord。
你正在尝试将一个类型转换为另一个接收fomer的对象:
Cat c = new Cat();
List<Cat> l = (List<Cat>) c; // error.