private static MemberInfo GetMemberInfoFromIndexerToken(IndexerToken token, Type targetType)
        {
            PropertyInfo indexerPropertyInfo = TypeExtensions.GetIndexerPropertyInfo(targetType,
                                                                                     token.Arguments.Select(a => a.GetType()).ToArray());

            if (indexerPropertyInfo != null)
            {
                return(indexerPropertyInfo.GetGetMethod());
            }
            return(null);
        }
        private static bool TryParseIndexerToken(string member, out IndexerToken token)
        {
            token = null;
            if (!IsValidIndexer(member))
            {
                return(false);
            }
            var list = new List <object>();

            list.AddRange(ExtractIndexerArguments(member).Select(ConvertIndexerArgument));
            token = new IndexerToken(list);
            return(true);
        }
Exemple #3
0
 private Expression CreateIndexerAccessExpression(Expression instance, IndexerToken indexerToken)
 {
     return
         (Expression.Dynamic(
              Binder.GetIndex(CSharpBinderFlags.None, typeof(DynamicPropertyAccessExpressionBuilder),
                              new[]
     {
         CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
         CSharpArgumentInfo.Create(
             CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant,
             null)
     }), typeof(object), new[]
     {
         instance,
         indexerToken.Arguments.Select(Expression.Constant).First()
     }));
 }
 private static IEnumerable <Expression> GetIndexerArguments(IndexerToken indexerToken)
 {
     return(indexerToken.Arguments.Select(a => (Expression)Expression.Constant(a)));
 }