2010-04-08 3 views
1

У меня есть коллекция свойств класса и вы хотите обновить каждое значение, итерации по коллекции через индекс.Как обновить свойство с помощью метода Type.GetProperties()?

1) создать коллекцию свойств таким образом

private PropertyInfo[] GetPropertiesOfMyClass() 
    { 
     Type myType = (typeof(myClass)); 
     PropertyInfo[] PropertyInfoArray = myType.GetProperties(
               BindingFlags.Public | 
               BindingFlags.Instance); 
     return PropertyInfoArray;     
    } 

2) Теперь, я хотел бы установить значение каждого из них в зависимости от индекса таким образом

public void UpdateProperty(MyClass instanceOfMyClass, string valueToUpdate, int index) 
    { 
     //TODO: 
     //1. Get an individual property from the GetPropertyOfMyClass() using index 
     //2. Update the value of an individual property of the instanceOfMyClass 
    } 

Я хотел бы быть в состоянии назвать UpdateProperty от контроллера, как это:

UpdateProperty(instanceOfMyClass, valueToUpdate, indexOfTheProperty); 

Честно говоря, я не знаю, как привлечь instanceOfMyClass в игре GetProperty только играет с myClass.

Поскольку я видел, что могу использовать Name, PropertyType, ... для получения информации об этом свойстве. Итак, я также пробовал GetPropertyOfMyClass() [index] .SetValue (...), но я потерялся в аргументах его конструктора, поэтому я оставил.

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

Спасибо за помощь

+0

Имейте в виду, что отражение довольно дорого. Вместо вызова функции GetPropertyOfMyClass() 'снова и снова вам может понадобиться кэшировать результаты. – tanascius

ответ

5

Ваша догадка верна. Вы можете использовать SetValue() обновить значение - это то, как сделать это:

GetPropertyOfMyClass()[index].SetValue(instanceOfMyClass, valueToUpdate, null); 

Последний аргумент can be null:

Дополнительные значения индекса для индексированных свойств. Это значение должно быть нулевым для неиндексированных свойств.

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