2008-09-26 6 views

Répondre

9

Il existe également 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); 
    } 
} 

qui pourrait être utilisé comme:

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

ou (comme une méthode d'extension):

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

Utilisez la réflexion pour cela.

Type.GetProperty() et Type.GetProperties() retournent chacun PropertyInfo instances, qui peuvent être utilisées pour lire une valeur de propriété sur un objet.

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

Type.GetMethod() et Type.GetMethods() chaque retour MethodInfo instances, qui peuvent être utilisés pour exécuter une méthode sur un objet.

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

Si vous ne connaissez pas nécessairement le type (ce qui serait un peu bizarre si vous nouvelle le nom de la propriété), que vous pourriez faire quelque chose comme ça aussi.

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

Oui, vous pouvez le faire ...

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

Il y a la classe System.Reflection.PropertyInfo qui peut être créé à l'aide object.GetType(). GetProperties(). Cela peut être utilisé pour sonder les propriétés d'un objet en utilisant des chaînes. (Des méthodes similaires existent pour les méthodes objet, les champs, etc.)

Je ne pense pas que cela vous aidera à atteindre vos objectifs. Vous devriez probablement créer et manipuler les objets directement. Les contrôles ont une propriété Name que vous pouvez définir, par exemple.

Questions connexes