日期:2014-05-19  浏览次数:20810 次

请教一个泛型+反射的类型转换难题
我有一个泛型类A:
public   class   A <T> {...}

假设我已经通过反射获得了一个实际上是A类型的FieldInfo(叫做fi吧),但是我又无法获知T是什么。在这种情况下,有没有一种办法,可以通过反射获得A的实例?即类似下面这样的效果:

A <>   a   =   fi.GetValue(obj)   as   A <> ;
或者
A <>   a   =   (A <> )fi.GetValue(obj);

当然,上面两条语句都是错的,不能通过编译,原因是没有提供T。那么在T不确定的情况下,正确的写法应该是怎么样的?

------解决方案--------------------
这个确实是个问题,各个泛型类之间实际上是完全没有关系的。
可以完全通过反射来调用,但是性能成问题。
比较好的做法是写一个A <T> 类的非泛型的接口IA,然后class A <T> : IA,然后用IA做为fi.GetValue(obj)的返回类型。参考.Net里集合类的写法,IEnumable <T> 和IEnumable,IList <T> 和IList等等。