2012-04-19 14 views
11

pytam podobne pytanie here , zakładają tego typu:Uzyskaj typ właściwości przez MemberExpression

public class Product { 

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

} 

i to taki, który korzystania MemberExpression:

używam go tak:

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

w HelperClass Po prostu potrzebuję nazwy nieruchomości (w tym przykładzie IsAllowed) i typ właściwości (w tym przykładzie Boolean) Mogę więc uzyskać nazwę właściwości, ale nie mogę uzyskać typu właściwości. Widzę typ właściwości debugowanie jako poniższym rysunku pokazano:

enter image description here

Więc jaka jest twoja propozycja, aby uzyskać typ właściwości?

Odpowiedz

22

Spróbuj odlewania body.Member do 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; 
    } 
}