使用反射更新类属性,并将属性的名称更新为字符串

Pet*_*ith 2 c# reflection properties

我有一个样本课

public class sampleClass
{
    public string givenName { get; set; }
    public string familyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及包含在该类中的一组值IDictionary<string, object> dataModel.我可以使用反射来迭代dataModel并使用dataModel键来获取值.

我想做的事情如下:

void UpdateValues(IDictionary<string, object> dataModel)
{
    Type sourceType = typeof(sampleClass);
    foreach (PropertyInfo propInfo in (sourceType.GetProperties()))
    {
        if (dataModel.ContainsKey(propInfo.Name))
        {
            //  set propInfo value here
            propInfo.Value = dataModel[propInfo.Name];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么做

propInfo.Value = dataModel[propInfo.Name];
Run Code Online (Sandbox Code Playgroud)

救命!谢谢 !!

小智 5

你需要一个sampleClass实例来设置属性,然后你可以使用SetValue函数来做到这一点:

propInfo.SetValue(yourinstance, dataModel[propInfo.Name], null);
Run Code Online (Sandbox Code Playgroud)

请参阅此URL:http://msdn.microsoft.com/en-us/library/axt1ctd9.aspx