2017-10-17 3 views
0

Est-il possible d'appeler une expression lambda sur un procédé objet d'une certaine façon afin que vous puissiez le faire ..C# Utiliser l'expression lambda pour obtenir le nom du paramètre de la méthode

(x => x.Property1)

qui devrait alors retourner PropertyInfo?

En ce moment, j'ai le ci-dessous:

public static class MethodSupport<T> 
{ 

    public static MethodInfo ActionInfo(Expression<Func<T, Action>> expression) 
    { 
     return MethodInfo<T>(expression); 
    } 

    public static MethodInfo MethodInfo<T>(LambdaExpression expression) 
    { 
     UnaryExpression unaryExpression = (UnaryExpression)expression.Body; 
     MethodCallExpression methodCallExpression = (MethodCallExpression)unaryExpression.Operand; 
     ConstantExpression methodCallObject = (ConstantExpression)methodCallExpression.Object; 
     MethodInfo interfaceMethodInfo = (MethodInfo)methodCallObject.Value; 

     Type implementedClassType = typeof(T); 
     MethodInfo implementedMethodInfo = interfaceMethodInfo.GetImplementingMethod(implementedClassType); 
     return implementedMethodInfo; 
    } 
} 

Ce qui me permet de revenir MethodInfo,

MethodInfo m = MethodSupport<ImageGalleryController>.ActionInfo(c => c.AttachExisting); 

mais je veux quelque chose d'autre qui me permettra de revenir PropertyInfo pour une propriété donnée

Répondre

0

Vous avez peut-être besoin de quelque chose comme ceci:

public static PropertyInfo GetPropertyInfo<T>(Expression<Func<T>> propertyExpression) 
    { 
     return ((MemberExpression)propertyExpression.Body).Member as PropertyInfo; 
    }