[英]Changing the properties of an object in a foreach loop
我的課
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++;
}
我該怎么做呢? 還是我真的可以這樣做?
不,你不能,無論如何都不容易。 通常使用對象初始化程序來完成此操作,這樣可以省去多次寫出變量名的麻煩。
person john = new person
{
name = "John",
age = "22",
height = "174cms",
weight = "60kgs"
};
您可以通過反射來執行類似的操作,但是您將失去類型安全性,因為您將為第i
個索引分配一個值,而且我不確定提取屬性時屬性的順序如何。 反射是C#的相當高級的部分(可能有危險),您可能應該遠離它,直到您真正需要它為止。
您可以嘗試使用反射來完成此操作,例如
john.GetType().GetProperties();
但是-不要這樣做! 考慮更改您的實現以使其更好。
例如-如果您應該以這種方式將列表與人員詳細信息一起使用,並且myList屬性始終以相同的順序出現-請更新john特定的屬性,例如:
john.name = myList[0];
..
但我建議您重新設計解決方案。
您可以使用Type.GetProperties
檢索屬性
PropertyInfo[] info = john.GetType().GetProperties();
不幸的是,手冊說
備注
GetProperties方法不按特定順序(例如字母順序或聲明順序)返回屬性。 您的代碼不得依賴於返回屬性的順序,因為該順序會有所不同。
因此,您仍然必須手動將info
與myList
匹配。
這樣做很漫長的路要走。 如果您知道列表始終會采用這種格式,請執行以下操作。
var john = new person
{
name = myList[0],
age = myList[1],
height = myList[2],
weight = myList[3]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.