簡體   English   中英

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

[英]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方法不按特定順序(例如字母順序或聲明順序)返回屬性。 您的代碼不得依賴於返回屬性的順序,因為該順序會有所不同。

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

這樣做很漫長的路要走。 如果您知道列表始終會采用這種格式,請執行以下操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM