2009-07-01 17 views
6

Ho una classe con un valore di proprietà come questa:Come utilizzare MethodInfo.Invoke per impostare il valore della proprietà?

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

voglio usare MethodInfo.Invoke() per impostare il valore della proprietà. Ecco alcuni codici:

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? 

Non riesco ad accedere al mio lavoro VS adesso. La mia domanda è come impostare Valore con un valore intero come 23?

+0

Usa PropertyInfo.SetValue, come detto qui di seguito. Se ti accorgi di essere costretto a utilizzare un oggetto MethodInfo, ottieni il metodo "get" della proprietà (PropertyInfo.GetGetMethod()) e invocalo come sopra. –

risposta

13

È possibile utilizzare il metodo PropertyInfo.SetValue.

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

effettivamente dovrebbe essere: pi.SetValue (o, 23, null); ? non 0 –

+0

Sì, errore di battitura fisso ... – CMS

0

È possibile farlo utilizzando lo standard PropertyInfo dallo spazio dei nomi System.Reflection.

2

Se si utilizza .NET Framework 4.6 e 4.5, è anche possibile utilizzare PropertyInfo.SetMethod Property:

object o; 
//... 
Type type = o.GetType(); 
PropertyInfo pi = type.GetProperty("Value"); 
pi.SetMethod.Invoke(o, new object[] {23}); 
Problemi correlati