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); }
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))); }