2009-07-01 2 views
6

У меня есть класс со свойством Value, как это:Как использовать MethodInfo.Invoke для установки значения свойства?

public class MyClass { 
    public property var Value { get; set; } 
    .... 
} 

Я хочу использовать MethodInfo.Invoke(), чтобы установить значение свойства. Вот некоторые коды:

object o; 
// use CodeDom to get instance of a dynamically built MyClass to o, codes omitted 
Type type = o.GetType(); 
MethodInfo mi = type.GetProperty("Value"); 
mi.Invoke(o, new object[] {23}); // Set Value to 23? 

Я не могу получить доступ к своей работе VS прямо сейчас. Мой вопрос в том, как установить значение с целым значением, например 23?

+0

Используйте PropertyInfo.SetValue, как указано ниже. Если вы когда-либо обнаружите, что вам ограничено использование объекта MethodInfo, получите метод get get (PropertyInfo.GetGetMethod()) и вызовите его, как указано выше. –

ответ

13

Вы можете использовать метод PropertyInfo.SetValue.

object o; 
//... 
Type type = o.GetType(); 
PropertyInfo pi = type.GetProperty("Value"); 
pi.SetValue(o, 23, null); 
+0

На самом деле это должно быть: pi.SetValue (o, 23, null); ? не 0 –

+0

Да, опечатка фиксированная ... – CMS

2

Если вы используете .NET Framework 4.6 и 4.5, вы можете также использовать PropertyInfo.SetMethod Property:

object o; 
//... 
Type type = o.GetType(); 
PropertyInfo pi = type.GetProperty("Value"); 
pi.SetMethod.Invoke(o, new object[] {23}); 
Смежные вопросы