2015-10-22 2 views
0

У меня есть словарь, который содержит пары значений, которые я хочу сопоставить и обновить в экземпляре класса, который у меня есть.Использование Reflection для обновления существующего экземпляра

Так, например, у меня есть;

name -> test 
userid -> 1 

В моем классе я тогда у

MyClass.Name 
MyClass.UserId 

Я хотел бы установить MyClass.Name = test и т.д.

В настоящее время у меня есть метод ниже;

public static GridFilters ParseGridFilters(Dictionary<string,string> data, MyClass myClass) 
     { 
      foreach (KeyValuePair<string, string> kvp in data) 
      { 
       Type t = typeof(MyClass); 
       t.GetProperty(kvp.Value, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); 

      } 

      return myClass; 
     } 

Как тогда проверить, если kvp.Key в (независимо от того случая, который я думаю, что я покрыта BindingFlags), а затем установите kvp.Value в MyClass. (Kvp.Key)

+1

Что 'kvp.Key это в' значит? Когда он? Когда это выходит? –

+0

[PropertyInfo.SetValue] (https://msdn.microsoft.com/en-us/library/hh194291 (v = vs.110) .aspx) –

+0

TL; DR. Вы ищете «свойство набора C# с отражением» - http://stackoverflow.com/questions/619767/set-object-property-using-reflection –

ответ

1

Вы должны сохранить ссылку на свойство, которое вы извлекаете с отражением, а затем использовать SetValue, чтобы установить его значение.

В коде также есть ошибка. Из вашего объяснения, похоже название собственности в Key, не Значение

public static GridFilters ParseGridFilters(Dictionary<string,string> data, MyClass myClass) 
    { 
     foreach (KeyValuePair<string, string> kvp in data) 
     { 
      Type t = typeof(MyClass); 
      var prop = t.GetProperty(kvp.Key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); 
      prop.SetValue(myClass, kvp.Value, null); 
     } 

     return myClass; 
    } 
+0

Thansk для этого, извините, я осознал свою ошибку с .Value, когда узнал мой код. –

Смежные вопросы