【.Net】泛型、数组和反射

近日在反射过程中,遇到对反射属性为泛型时取值不了的问题。

主要是GetValue()方法得到的是一个object类型数据,而如果强制转换则需要具体泛型和具体类型参数,否则会在运行时报错,或者得到Null值。

因为要对目标泛型的元素做修改,所以放弃了重新构造集合的思路。

故,最终选择的是反射泛型的ToArray方法来得到结果object,并转化为object[],再利用得到的数组来做进一步的操作。

因为做过测试,对ToArray()出来的数组中的个体进行属性修改,对于泛型集合而言也是会有修改的(浅拷贝吧这里是)。

// P 是待反射的类实例
var obj = field.GetValue(p);
var type = field.FieldType;
var mi = type.GetMethod("ToArray");
// obj 是执行者,后方是函数参数,ToArray没有参数,故使用null
var res = mi.Invoke(obj, null);
var resArray = res as data[];
Console.WriteLine(resArray.Length);
posted @ 2022-06-30 16:45  不正游侠  阅读(47)  评论(0)    收藏  举报