2008-09-26 6 views

Antwort

9

Es gibt auch Type.InvokeMember.

public static class ReflectionExt 
{ 
    public static object GetAttr(this object obj, string name) 
    { 
     Type type = obj.GetType(); 
     BindingFlags flags = BindingFlags.Instance | 
           BindingFlags.Public | 
           BindingFlags.GetProperty; 

     return type.InvokeMember(name, flags, Type.DefaultBinder, obj, null); 
    } 
} 

, die wie verwendet werden könnte:

object value = ReflectionExt.GetAttr(obj, "PropertyName"); 

oder (als Erweiterung Methode):

object value = obj.GetAttr("PropertyName"); 
3

Verwenden Sie Reflektion dafür.

Type.GetProperty() und Type.GetProperties() jede Rückkehr PropertyInfo Instanzen, die verwendet werden können, um einen Eigenschaftswert für ein Objekt zu lesen.

var result = typeof(DateTime).GetProperty("Year").GetValue(dt, null) 

Type.GetMethod() und Type.GetMethods() jede Rückkehr MethodInfo Instanzen, die verwendet werden können, ein Verfahren auf einem Objekt auszuführen.

var result = typeof(DateTime).GetMethod("ToLongDateString").Invoke(dt, null); 

Wenn Sie nicht unbedingt wissen, den Typ (die ein wenig seltsam wäre, wenn Sie den Namen der Eigenschaft neu), als man auch etwas tun könnte.

var result = dt.GetType().GetProperty("Year").Invoke(dt, null); 
1

Ja, Sie können dies tun ...

typeof(YourObjectType).GetProperty("PropertyName").GetValue(instanceObjectToGetPropFrom, null); 
0

Es gibt die System.Reflection.PropertyInfo Klasse, die Object.GetType erstellt werden können(). GetProperties(). Dies kann verwendet werden, um die Eigenschaften eines Objekts mithilfe von Zeichenfolgen zu untersuchen. (Ähnliche Methoden existieren für Objektmethoden, Felder usw.)

Ich glaube nicht, dass das Ihnen helfen wird, Ihre Ziele zu erreichen. Sie sollten die Objekte wahrscheinlich nur direkt erstellen und bearbeiten. Steuerelemente verfügen über eine Name-Eigenschaft, die Sie beispielsweise festlegen können.

Verwandte Themen