2009-07-01 6 views
6

Ich habe eine Klasse mit einer Eigenschaft Wert wie folgt aus:Wie MethodInfo.Invoke verwenden, um Eigenschaftswert festzulegen?

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

Ich möchte MethodInfo.Invoke() verwenden Eigenschaft Wert zu setzen. Hier sind ein paar Codes:

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? 

Ich kann nicht sofort auf meine Arbeit VS zugreifen. Meine Frage ist, wie Value mit einem ganzzahligen Wert wie 23 festgelegt wird?

+0

Verwenden PropertyInfo.SetValue, wie unten erwähnt. Wenn Sie jemals feststellen, dass Sie gezwungen sind, ein MethodInfo-Objekt zu verwenden, rufen Sie die "get" -Methode der Eigenschaft (PropertyInfo.GetGetMethod()) ab und rufen Sie sie wie oben auf. –

Antwort

13

Sie können die PropertyInfo.SetValue Methode verwenden.

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

eigentlich sollte es sein: pi.SetValue (o, 23, null); ? nicht 0 –

+0

Ja, Tippfehler behoben ... – CMS

2

Wenn Sie .NET Framework 4.6 und 4.5 verwenden, können Sie auch PropertyInfo.SetMethod Property verwenden können:

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