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

这是第一个类,也是我要反射的类
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));

}
}
}
}
}

暮色呼如
浏览 107回答 2
2回答

慕森卡

你的当然是1111&nbsp;&nbsp;你在反射获取对象的时候 循环操作的时候操作的是同一个对象你必须在循环中 对对应的类型创建新的对象&nbsp;然后加入List中的 才并非都引用同一个对象&nbsp;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); //加上这一句&nbsp;foreach (PropertyInfo pro in pros){pro.SetValue(obj, i.ToString(), null);}objs.Add(obj);}return objs;}其他代码不变 0011

万千封印

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的
打开App,查看更多内容
随时随地看视频慕课网APP