2 回答
TA贡献1806条经验 获得超8个赞
你的当然是1111
你在反射获取对象的时候 循环操作的时候操作的是同一个对象
你必须在循环中 对对应的类型创建新的对象
然后加入List中的 才并非都引用同一个对象
public static List<object> GetRefection(object obj)
{
List<object> objs = new List<object>();
Type t = obj.GetType();
PropertyInfo[] pros = t.GetProperties();
for (int i = 0; i < pros.Length; i++)
{
obj=t.InvokeMember("Refection", BindingFlags.CreateInstance, null, null, null); //加上这一句
foreach (PropertyInfo pro in pros)
{
pro.SetValue(obj, i.ToString(), null);
}
objs.Add(obj);
}
return objs;
}
其他代码不变 0011
TA贡献1891条经验 获得超3个赞
for (int i = 0; i < 2; i++)
{
obj=t.InvokeMember("Refection", BindingFlags.CreateInstance, null, null, null); //######
foreach (PropertyInfo pro in pros)
{
pro.SetValue(obj, i.ToString(), null);
}
objs.Add(obj);
}
因为你这一句objs.Add(obj);添加的是同一个对象,第一次虽然令其属性为0,第二次又把它属性弄成1,都是对这一个对象操作,”他俩“的属性会指到同一个引用,所以都是11了,你试着增加一个属性,然后从0到3循环,将来会输出222222的
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报