0

我的课

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++;
} 

我该怎么做呢?或者我真的可以这样做吗?

4

5 回答 5

2

不,你不能,反正不容易。这通常使用对象初始化器来完成,这样可以省去多次写出变量名的麻烦。

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

你可以用反射做这样的事情,但你会失去类型安全性,因为你会为i第 th 索引分配一个值,而且我不太确定提取它们时属性的顺序是什么。反射是 C# 中一个相当高级(并且有潜在危险)的部分,您可能应该远离它,直到您真正需要它。

于 2013-03-31T13:22:22.263 回答
1

你看过这些帖子吗?

如何获取类的属性列表?

使用反射获取属性的字符串名称

我希望这可以帮助你。可能不是列表,您可以使用数据表并将每列命名为类中每个属性的名称。

于 2013-03-31T13:28:42.353 回答
0

您可以尝试使用反射来做到这一点,例如

john.GetType().GetProperties();

但是——不要这样做!考虑更改您的实现以使其以更好的方式实现。
例如 - 如果您应该以这种方式使用带有人员详细信息的列表,并且 myList 属性始终以相同的顺序出现 - 更新 john 特定属性,例如:

john.name = myList[0];
..

但我建议重新设计您的解决方案。

于 2013-03-31T13:23:49.600 回答
0

您可以Type.GetProperties用于检索属性

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

不幸的是,手册说

备注
GetProperties 方法不按特定顺序返回属性,例如字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。

所以你仍然必须手动匹配infomyList

于 2013-03-31T13:25:34.397 回答
0

那样做的路还很长。如果您知道您的列表将始终采用这种格式,请执行类似的操作。

var john = new person 
{
    name = myList[0],
    age = myList[1],
    height = myList[2],
    weight = myList[3]
}
于 2013-03-31T13:30:00.513 回答