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 關注
- 137 瀏覽
添加回答
舉報