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]
}