为了账号安全,请及时绑定邮箱和手机立即绑定

我的问题是:我想得到值分别是0011为什么最终变成了1111?

我的问题是:我想得到值分别是0011为什么最终变成了1111?

C#
暮色呼如 2023-04-09 21:17:08
这是第一个类,也是我要反射的类using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication4{public class Refection{private string name;public string Name{get { return name; }set { name = value; }}private string age;public string Age{get { return age; }set { age = value; }}}}这是主程序的类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace ConsoleApplication4{public class Program{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 < 2; i++){foreach (PropertyInfo pro in pros){pro.SetValue(obj, i.ToString(), null);}objs.Add(obj);}return objs;}static void Main(string[] args){Refection refe = new Refection();List<Object> objs = GetRefection(refe);for (int i = 0; i < objs.Count; i++){Type t = objs[i].GetType();PropertyInfo[] pros = t.GetProperties();foreach (PropertyInfo pro in pros){Console.WriteLine(pro.GetValue(objs[i], null));}}}}}
查看完整描述

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

查看完整回答
反对 回复 2023-04-11
?
万千封印

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的


查看完整回答
反对 回复 2023-04-11
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信