Exemplo n.º 1
0
        /// <summary>
        /// Cria a expressão de acesso para o membro.
        /// </summary>
        /// <param name="token"></param>
        /// <param name="instance"></param>
        /// <returns></returns>
        public static Expression CreateMemberAccessExpression(this IMemberAccessToken token, Expression instance)
        {
            System.Reflection.MemberInfo memberInfoForType = token.GetMemberInfoForType(instance.Type);
            if (memberInfoForType == null)
            {
                throw new ArgumentException(FormatInvalidTokenErrorMessage(token, instance.Type));
            }
            IndexerToken indexerToken = token as IndexerToken;

            if (indexerToken != null)
            {
                IEnumerable <Expression> indexerArguments = indexerToken.GetIndexerArguments();
                return(Expression.Call(instance, (System.Reflection.MethodInfo)memberInfoForType, indexerArguments));
            }
            return(Expression.MakeMemberAccess(instance, memberInfoForType));
        }