请教一个泛型+反射的类型转换难题
我有一个泛型类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等等。