亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的問題是:我想得到值分別是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 關注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號