我的班级
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++;
}
我该怎么做?或者我真的可以这样做吗?
答案 0 :(得分:2)
不,你不能,不管怎么说都不容易。这通常使用对象初始化器来完成,这样可以省去多次写出变量名的麻烦。
person john = new person
{
name = "John",
age = "22",
height = "174cms",
weight = "60kgs"
};
您可以使用reflection执行此类操作,但是您将失去类型安全性,因为您要为i
索引分配值而我不太确定该命令的顺序是什么当你提取它们时,属性就会出现。反射是C#的一个非常先进(并且有潜在危险)的部分,你可能应该远离它,直到你确实需要它为止。
答案 1 :(得分:1)
你看过这些帖子吗?
How to get the list of properties of a class?
Get string name of property using reflection
我希望这会对你有所帮助。可以使用数据表而不是列表,并将每列命名为类中每个属性的名称。
答案 2 :(得分:0)
您可以尝试使用Reflection进行此操作,例如
john.GetType().GetProperties();
但是 - 不要这样做!考虑更改您的实施以使其更好地发挥作用 例如 - 如果您应该以这种方式使用列表和人员详细信息,并且myList属性始终按相同顺序排列 - 更新john特定属性,例如:
john.name = myList[0];
..
但我建议重新设计你的解决方案。
答案 3 :(得分:0)
您可以使用Type.GetProperties
来检索属性
PropertyInfo[] info = john.GetType().GetProperties();
不幸的是,手册说
<强>说明强>
GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序。您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。
因此,您仍必须手动将info
与myList
匹配。
答案 4 :(得分:0)
有很长的路要走。如果你知道你的列表总是采用这种格式,那就做一些像。
var john = new person
{
name = myList[0],
age = myList[1],
height = myList[2],
weight = myList[3]
}