private static Property GetProperty <TOut>(Expression <Func <T, TOut> > expression) { var memberExpression = expression.Body as MemberExpression; if (memberExpression == null) { throw new Exception("Could not determine member from " + expression); } var setter = GenerateSetterMethod <TOut>(memberExpression); return(TypedProperty <T, TOut> .Create(memberExpression.Member.Name, memberExpression.Type, expression.Compile(), setter)); }