将字符串转换为属性名称

时间:2016-03-01 11:12:26

标签: c#

我有一个名为AnchorLoadclass的类,其属性类似于diameterthickness。我在列表中有一个属性列表。现在我想迭代列表并将属性值设置为:

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

2 个答案:

答案 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);