我有一个名为AnchorLoadclass
的类,其属性类似于diameter
,thickness
。我在列表中有一个属性列表。现在我想迭代列表并将属性值设置为:
myanchor.(mylist[0]) = "200";
但它不起作用。 我的代码如下:
private void Form1_Load(object sender, EventArgs e)
{
AnchorLoadclass myanchor = new AnchorLoadclass();
var mylist = typeof(AnchorLoadclass).GetProperties().ToList();
myanchor.GetType().GetProperty(((mylist[0].Name).ToString())) = "200";
myanchor.thickness ="0.0";
propertyGrid1.SelectedObject = myanchor;
}
答案 0 :(得分:1)
如你忘记在问题中提到的那一行
myanchor.GetType().GetProperty(((mylist[0].Name).ToString())) = "200";
无法编译(请避免不能正常工作)。你必须这样做:
// 1. Get property itself:
String name = "diameter"; // or mylist[0].Name or whatever name
var propInfo = myanchor.GetType().GetProperty(name);
// 2. Then assign the value
propInfo.SetValue(myanchor, 200);
通常,这是一个很好的做法
// Test, if property exists
if (propInfo != null) ...
// Test, if property can be written
if (propInfo.CanWrite) ...
等
答案 1 :(得分:0)
您应该使用PropertyInfo在对象(myanchor)上设置属性值(200),如下所示:
PropertyInfo propertyInfo = myanchor.GetType().GetProperty(((mylist[0].Name).ToString()));
propertyInfo.SetValue(myanchor, 200);