SetValue для свойства не обновляет объект - PullRequest
1 голос
/ 04 января 2012

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

T row = new T();

foreach (PropertyInfo property in row.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
    Field[] dbFields = property.GetCustomAttributes(typeof(Field), false) as Field[];

    Object obj = (Int32)1000; // Arbitrary Value;
    Object castObj = Convert.ChangeType(obj, property.PropertyType);

    property.SetValue(row, castObj, null); // DOES NOT UPDATE row!! WHY!?
}

Любая помощь приветствуется.

1 Ответ

4 голосов
/ 04 января 2012

Должно работать нормально, если T является ссылочным типом (классом).Он не будет работать как есть, если T является типом значения (структура).Значение будет помещено в рамку при каждом вызове property.SetValue, а существующее значение останется нетронутым.Возможно ли, что в этом проблема?Если это так, я бы настоятельно рекомендовал вам в первую очередь избегать написания изменяемых типов значений - вместо этого рассмотрите возможность сделать его ссылочным типом.

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

...