public static Func <TTarget, TProperty> BuildGetter <TTarget, TProperty>(PropertyInfo property) { // TODO: Make sure the property belongs to TTarget if (property is null) { throw new ArgumentNullException(nameof(property)); } if (property.PropertyType != typeof(TProperty)) { throw new InvalidOperationException(); } var targetExpr = Expression.Parameter(typeof(TTarget)); var getterExpr = ExpressionHelpers.BuildGetterExpression(targetExpr, property); return(Expression.Lambda <Func <TTarget, TProperty> >(getterExpr, targetExpr) .Compile()); }
public static Func <TTarget, TField> BuildGetter <TTarget, TField>(FieldInfo field) { // TODO: Make sure the field belongs to TTarget if (field is null) { throw new ArgumentNullException(nameof(field)); } if (field.FieldType != typeof(TField)) { throw new InvalidOperationException(); } var targetExpr = Expression.Parameter(typeof(TTarget)); var getterExpr = ExpressionHelpers.BuildGetterExpression(targetExpr, field); return(Expression.Lambda <Func <TTarget, TField> >(getterExpr, targetExpr) .Compile()); }