PropertyInfo.setValue (объект obj, значение объекта val, индекс объекта []) значение свойства не изменяется при изменении «значения объекта val»

#c# #reflection #propertyinfo #setvalue

#c# #отражение #propertyinfo #setvalue

Вопрос:

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

 /* PropertyInfo.SetValue(object obj, object val, object[] index) */

propertyInfo.SetValue(obj, val, null) 
  

оба obj и val являются ссылочным типом, но проблема в том, что я хочу, чтобы значение obj's property менялось при val изменении значения. Но, к сожалению, этого не происходит.
Есть ли какой-либо способ достичь того, что я хочу сделать.

С уважением

Umair

Комментарии:

1. Что именно вы подразумеваете под «этого не происходит»? Я не вижу очевидных проблем с вашим кодом.

Ответ №1:

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

С другой стороны, если вы не заменяете экземпляр, а изменяете содержимое экземпляра, то это должно произойти.

Другими словами, это будет работать:

 TestClass val = new TestClass();
val.Name = "Before";
propertyInfo.SetValue(obj, val, null);
val.Name = "After";
  

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

Однако это не сработает:

 TestClass val = new TestClass();
val.Name = "Before";
propertyInfo.SetValue(obj, val, null);
val = new TestClass();
val.Name = "After";
  

Теперь у вас есть два экземпляра, на один из которых ссылается свойство, а на другой — переменная. Нет способа заставить свойство автоматически получать этот новый экземпляр, поэтому вам нужно найти другой способ сделать это.