C# 如何通过反射设置对象属性

C# 如何通过反射设置对象属性,c#,reflection,C#,Reflection,我正在尝试编写一个方法,该方法将接受以下3个参数: 对象(用户定义的类型会有所不同) 表示该对象的属性名称的字符串 字符串值,必须在赋值之前将其从字符串转换为属性的数据类型 方法签名如下所示: public void UpdateProperty(Object obj, string propertyName, string value) 我发现了如何使用以下代码通过反射检索属性值: PropertyInfo[] properties = target.GetType().GetPropert

我正在尝试编写一个方法,该方法将接受以下3个参数:

  • 对象(用户定义的类型会有所不同)

  • 表示该对象的属性名称的字符串

  • 字符串值,必须在赋值之前将其从字符串转换为属性的数据类型

  • 方法签名如下所示:

    public void UpdateProperty(Object obj, string propertyName, string value)
    
    我发现了如何使用以下代码通过反射检索属性值:

    PropertyInfo[] properties = target.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
    
      foreach (PropertyInfo prop in properties)
      {
        if (string.Compare(prop.Name, propertyName, true) == 0)
        {
          return prop.GetValue(target, null).ToString();
        }
      }
    
    问题是我不知道如何设置属性值。此外,值是以字符串的形式输入的,因此我必须根据属性的数据类型检查值的数据类型,然后才能对其进行强制转换和分配

    如有任何帮助,我们将不胜感激。

    的帮助应该适合您。使用您的代码:

    newValue = Convert.ChangeType(givenValue, prop.PropertyType);
    prop.SetValue(target, newValue, null);
    

    SetValue是您正在寻找的

    这里有很多问题和示例代码(请查看本页右侧的相关问题列表)


    e、 g.

    在没有第三个参数(null)的情况下,这不是为我编译的,然后它出现了“TypeConverter无法从System.String转换”的错误。我不确定。无论哪种情况,我都需要尝试转换到特定的数据类型(prop.PropertyType)。奥斯汀,你就是那个人!这很有效。我使用var作为newValue的类型声明(newValue=Convert.ChangeType(givenValue,prop.PropertyType);)
    prop.SetValue(target,new TypeConverter().ConvertFromString(propertyValue));