C#通过变量名获取和设置属性

Jan*_*sek 12 c# string variables properties

有没有办法做到这一点?我尝试测试对象的属性是否存在,如果存在,我想为它设置一个值.(也许完整的想法很糟糕,如果是真的 - 为什么?)

class Info
{
    public string X1{ set; get; }
    public string X2{ set; get; }
    public string X3{ set; get; }
}

Dictionary<string, string> values = new Dictionary<string, string>();
values.Add("X1","blah1");
values.Add("X2","blah2");
values.Add("NotThere","blah3");

Info info = new Info();

foreach (var item in values)
{
  string propertyName = item.Key;
  string value = item.Value;
  if (info.GetType().GetProperty(propertyName) != null)  //this probably works
  {
        info.propertyName = value; //this doesn't, how to set it?
  }
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 29

是的,您正在寻找PropertyInfo.SetValue方法,例如

var propInfo = info.GetType().GetProperty(propertyName);
if (propInfo != null)
{
    propInfo.SetValue(info, value, null);
}
Run Code Online (Sandbox Code Playgroud)


Ami*_*ach 8

var propertyInfo = info.GetType().GetProperty(propertyName);
if (propertyInfo != null)  //this probably works. Yes it is
  {
        propertyInfo.SetValue(info, value, null);
  }
Run Code Online (Sandbox Code Playgroud)


Mat*_*ten 5

您需要调用SetValue属性上的方法:

var property = info.GetType().GetProperty(propertyName);
if (property != null)
{
    property.SetValue(info, value, null); 
}
Run Code Online (Sandbox Code Playgroud)