Установить объект свойства отражения, не зная имени и значения свойства - PullRequest
1 голос
/ 13 ноября 2011

У меня есть класс с именем BackUp, который содержит несколько свойств.Допустим, у меня есть существующий экземпляр BackUp с инициализированными свойствами.

Поскольку я использую отражение в классе BackUp, где я хочу создать объект AgentActivator и мне нужно установить его свойства,Идея состоит в том, чтобы извлечь свойства из объекта BackUp.

Проблема состоит в том, чтобы взять объект PropertyInfo из объекта BackUp и установить соответствующее свойство для отраженного объекта.

Я делаю следующее:

Assembly assembly = Assembly.LoadFile(localBackUp.AssemblyFileName);
Type currentClasstype = assembly.GetType(localBackUp.ClassName);            
PropertyInfo[] properties = currentClasstype.GetProperties();
object classInstance = Activator.CreateInstance(localBackUp.AssemblyFileName, 
    localBackUp.ClassName);
string propName= null;                   
foreach(PropertyInfo prop in properties)
{
    propName= prop.Name;
    currentClasstype.GetProperty(propName).
        SetValue(classInstance, findProperty(localBackUp, propNmae), null);

}

Мне нужно найти способ реализовать метод findProperty.Его задача - получить строку (имя свойства) и вернуть совпадающее значение из localBackUp, которое содержит свойство с propName.

Ответы [ 2 ]

1 голос
/ 13 ноября 2011

Из вашего кода я предполагаю, что Type из localBackup и classInstance одинаковы и, следовательно, просто инициализируют новый экземпляр класса с теми же значениями свойств, которые уже есть у другого экземпляра класса (localBackup) try

prop.GetSetMethod().Invoke (classInstance, new object[] { prop.GetGetMethod().Invoke(localBackUp, null) } );

Одно замечание:

Если мое предположение верно, то ИМХО есть гораздо лучшие варианты сделать то, что вы пытаетесь (например, сериализацией и десериализацией экземпляра) ...

0 голосов
/ 13 ноября 2011

Если ваша цель - клонировать объект, лучший (я думаю) подход описан здесь: Глубокое клонирование объектов (как @Yahia упомянул сериализации и десериализации).Весьма важно, что он возвращает глубокую копию , поэтому оригинальный и новый объект не разделяют данные между собой.

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