2012-04-19 11 views
11

chiedo domanda simile here , assumere questo tipo:Get Tipo di proprietà da parte MemberExpression

public class Product { 

public string Name { get; set; } 
public string Title { get; set; } 
public string Category { get; set; } 
public bool IsAllowed { get; set; } 

} 

e questo che utilizzano MemberExpression:

Io lo uso come questo:

HelperClass<Product>.Property(p => p.IsAllowed); 

in HelperClass Ho solo bisogno di nome della proprietà (in questo esempio IsAllowed) e tipo di proprietà (in questo esempio Boolean) Così posso ottenere il nome della proprietà ma non riesco a ottenere il tipo di proprietà. Vedo il tipo di proprietà in debug come segue immagine indicata:

enter image description here

Allora, qual è il suo suggerimento per ottenere tipo di proprietà?

risposta

22

Prova a trasmettere body.Member ad un PropertyInfo

public class HelperClass<T> 
{ 
    public static void Property<TProp>(Expression<Func<T, TProp>> expression) 
    { 
     var body = expression.Body as MemberExpression; 

     if (body == null) 
     { 
      throw new ArgumentException("'expression' should be a member expression"); 
     } 

     var propertyInfo = (PropertyInfo)body.Member; 

     var propertyType = propertyInfo.PropertyType; 
     var propertyName = propertyInfo.Name; 
    } 
}