Не удается получить PropertyInfo.SetValue (), чтобы установить значение для моего объекта - PullRequest
2 голосов
/ 09 августа 2010

Я упростил приведенный ниже код до базового примера, но до сих пор не могу получить значение для установки.При выполнении propertyInfo.SetValue () он достигнет точки останова на установщике моего объекта Contact, и значение будет правильно установлено в «установщике».Однако после выполнения SetValue () строковые свойства в моем проекте projectContact.Contact не были изменены на «a».Есть идеи, что я могу делать не так?

IEnumerable<ProjectContact> contacts = GetContactsByProject(projectId);

        foreach (ProjectContact projectContact in contacts)
        {
            foreach (PropertyInfo propertyInfo in projectContact.Contact.GetType().GetProperties())
            {
                if (propertyInfo.PropertyType == typeof(string))
                {
                    propertyInfo.SetValue(projectContact.Contact, "a", null);
                }
            }
        }

Ответы [ 2 ]

7 голосов
/ 09 августа 2010

Я могу представить две возможности:

  1. Установщик свойства не работает правильно на свойстве. Возможно, оно устанавливает поле, отличное от свойства get, поэтому, когда вы устанавливаете свойство, вы никогда не «устанавливаете» реальное значение.
  2. Если «Контакт» является структурой (типом значения), projectCOntact.Contact вернет копию структуры. Это не позволит вам когда-либо изменить «настоящий» объект.
4 голосов
/ 09 августа 2010

Позвольте мне предположить, что ваш тип ProjectContact является struct.

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

Вам следует изменить тип ProjectContact на класс.


Также возможно, что у вас есть ошибка в вашем сеттере.

...