System.Linq.Expressions.Expression.MakeMemberAccess C# (CSharp) Method

MakeMemberAccess() public static method

Creates a MemberExpression accessing a property or field.
public static MakeMemberAccess ( Expression expression, MemberInfo member ) : MemberExpression
expression Expression The containing object of the member. This can be null for static members.
member System.Reflection.MemberInfo The member to be accessed.
return MemberExpression
        public static MemberExpression MakeMemberAccess(Expression expression, MemberInfo member)
        {
            ContractUtils.RequiresNotNull(member, nameof(member));

            FieldInfo fi = member as FieldInfo;
            if (fi != null)
            {
                return Expression.Field(expression, fi);
            }
            PropertyInfo pi = member as PropertyInfo;
            if (pi != null)
            {
                return Expression.Property(expression, pi);
            }
            throw Error.MemberNotFieldOrProperty(member, nameof(member));
        }
    }

Usage Example

    private static Accessor GetAccessor <TAttribute>(Type targetType)
        where TAttribute : Attribute
    {
        Accessor accessor;
        var      cache = GetCache <TAttribute>();

        if (cache.TryGetValue(targetType, out accessor))
        {
            return(accessor);
        }
        var member = FindMember <TAttribute>(targetType);

        if (member == null)
        {
            cache[targetType] = NullCallback;
            return(NullCallback);
        }
        var targetParameter    = E.Parameter(typeof(object), "target");
        var accessorExpression = E.Lambda <Accessor>(
            E.Convert(
                E.MakeMemberAccess(
                    E.Convert(targetParameter, targetType),
                    member),
                typeof(object)),
            targetParameter);

        accessor          = accessorExpression.Compile();
        cache[targetType] = accessor;
        return(accessor);
    }
All Usage Examples Of System.Linq.Expressions.Expression::MakeMemberAccess
Expression