main
 1using System;
 2using System.Linq.Expressions;
 3using System.Reflection;
 4
 5namespace jive
 6{
 7  static public class ExpressionExtensions
 8  {
 9    static public PropertyInfo pick_property<T>(this Expression<Func<T, object>> expression)
10    {
11      return (PropertyInfo) member_expression(expression).Member;
12    }
13
14    static MemberExpression member_expression<T>(Expression<Func<T, object>> expression)
15    {
16      if (expression.Body.NodeType == ExpressionType.Convert)
17        return ((UnaryExpression) expression.Body).Operand as MemberExpression;
18      if (expression.Body.NodeType == ExpressionType.MemberAccess)
19        return expression.Body as MemberExpression;
20      throw new NotImplementedException();
21    }
22  }
23}