C# 更改foreach循环中对象的属性

C# 更改foreach循环中对象的属性,c#,class,object,dynamic,foreach,C#,Class,Object,Dynamic,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" ,"60

我的班级

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=新人();
int i=0;
List myList=新列表(){“John”、“22”、“174cms”、“60kgs”};
foreach(约翰的财产)
{
property=myList[i].toString();
i++;
} 

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

不,你不能,反正也不容易。这通常是通过对象初始化器完成的,这样就省去了多次写出变量名的麻烦

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

您可以使用执行类似的操作,但您将失去类型安全性,因为您将为
i
th索引赋值,并且我不确定提取属性时属性的顺序。反射是C#的一个相当高级的部分(并且可能是危险的),在你真正需要它之前,你可能应该远离它。

不,你不能,无论如何也不容易。这通常是通过对象初始化器完成的,这样就省去了多次写出变量名的麻烦

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

您可以使用执行类似的操作,但您将失去类型安全性,因为您将为
i
th索引赋值,并且我不确定提取属性时属性的顺序。反射是C#的一个非常高级(并且有潜在危险)的部分,在您真正需要它之前,您可能应该远离它。

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

john.GetType().GetProperties()

但是,不要这样做!考虑更改您的实现,以更好地实现它。 例如,如果您应该以这种方式使用包含人员详细信息的列表,并且myList属性总是按相同的顺序出现,请更新特定于john的属性,如:

john.name = myList[0];
..

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

您可以尝试通过反射来实现这一点,例如

john.GetType().GetProperties()

但是,不要这样做!考虑更改您的实现,以更好地实现它。 例如,如果您应该以这种方式使用包含人员详细信息的列表,并且myList属性总是按相同的顺序出现,请更新特定于john的属性,如:

john.name = myList[0];
..
但是我建议重新设计您的解决方案。

您可以使用它来检索属性

PropertyInfo[] info = john.GetType().GetProperties();
不幸的是,手册上说

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

因此,您仍然必须手动将
信息
myList
匹配。

您可以用于检索属性

PropertyInfo[] info = john.GetType().GetProperties();
不幸的是,手册上说

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


因此,您仍然必须手动将
info
myList
匹配。

您看过这些帖子吗


我希望这对你有帮助。可以使用datatable代替列表,并将每列命名为类中每个属性的名称。

您看过这些帖子吗


我希望这对你有帮助。可以使用datatable来代替列表,并使用类中每个属性的名称来命名每个列。

这样做有点费时费力。如果你知道你的列表总是那样的格式,那就这样做吧

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

这样做有点太远了。如果你知道你的列表总是那样的格式,那就这样做吧

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