【.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);

浙公网安备 33010602011771号