summaryrefslogtreecommitdiff
path: root/lib/ExpressionExtensions.cs
blob: 6dbf2ecbc36824a4e566ca6b4d2e905b8036804b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Linq.Expressions;
using System.Reflection;

namespace jive
{
  static public class ExpressionExtensions
  {
    static public PropertyInfo pick_property<T>(this Expression<Func<T, object>> expression)
    {
      return (PropertyInfo) member_expression(expression).Member;
    }

    static MemberExpression member_expression<T>(Expression<Func<T, object>> expression)
    {
      if (expression.Body.NodeType == ExpressionType.Convert)
        return ((UnaryExpression) expression.Body).Operand as MemberExpression;
      if (expression.Body.NodeType == ExpressionType.MemberAccess)
        return expression.Body as MemberExpression;
      throw new NotImplementedException();
    }
  }
}