2013-03-31 49 views
0

我的課更改在foreach循環中的對象的屬性

class person 
{ 
    public string name; 
    public string age; 
    public string height; 
    public string weight; 
} 

這就是我想做的事......

person john = new person(); 
int i=0; 

List<string> myList = new List<string>() { "John", "22", "174cms" ,"60kgs"}; 
foreach(property in john) 
{ 
    property = myList[i].toString(); 
    i++; 
} 

我該怎麼辦呢?或者我可以這樣做嗎?

回答

2

不,你不能輕易反正。這通常是通過一個對象初始化程序來完成的,該對象初始化程序避免了多次寫出變量名稱的麻煩。

person john = new person 
{ 
    name = "John", 
    age = "22", 
    height = "174cms", 
    weight = "60kgs" 
}; 

你可以做這樣的事情與reflection,但你會失去類型安全,你會被分配一個值i個指標,我不太確定是什麼屬性的順序出來的當你提取它們。反射是C#的一個非常高級的(也是潛在危險的)部分,你應該遠離它,直到你真的需要它。

0

你可以嘗試用反射來做到這一點,像

john.GetType().GetProperties();

可是 - 不這樣做!考慮改變你的實施,以更好的方式。
例如 - 如果你要使用清單以這種方式與人的詳細信息,並myList中性能始終排在同一順序 - 更新約翰特定的屬性,如:

john.name = myList[0]; 
.. 

但我會建議重新設計你的解。

0

可以使用Type.GetProperties檢索性能

PropertyInfo[] info = john.GetType().GetProperties(); 

不幸的是,手冊上說

備註
的的GetProperties方法不按特定的順序返回屬性,如字母或聲明順序。您的代碼不得依賴於返回屬性的順序,因爲順序會有所不同。

因此,您仍必須手動將infomyList相匹配。

0

很長的路要做到這一點。如果你知道你的列表總是會採用這種格式,就像做一些類似的事情。

var john = new person 
{ 
    name = myList[0], 
    age = myList[1], 
    height = myList[2], 
    weight = myList[3] 
}