Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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());
        }