private Expression VisitMemberAccess(SerializableMemberExpression m) { var target = Visit(m.Expression); var field = m.Member as FieldInfo; if (field != null) { return(Expression.Field(target, field)); } var property = m.Member as PropertyInfo; if (property != null) { return(Expression.Property(target, property)); } var method = m.Member as MethodInfo; if (method != null) { return(Expression.Property(target, method)); } throw new ArgumentException(); }
/// <summary> /// Visits a <see cref="SerializableMemberExpression"/>. /// </summary> /// <param name="expression"><see cref="SerializableMemberExpression"/> to visit.</param> /// <returns>Returns the converted <see cref="Expression"/>.</returns> protected abstract Expression VisitSerializableMemberExpression(SerializableMemberExpression expression);
/// <summary> /// Visits a <see cref="SerializableMemberExpression"/>. /// </summary> /// <param name="expression"><see cref="SerializableMemberExpression"/> to visit.</param> /// <returns>Returns the converted <see cref="Expression"/>.</returns> protected override Expression VisitSerializableMemberExpression(SerializableMemberExpression expression) { return(Expression.MakeMemberAccess(Visit(expression.Expression), expression.Member.GetClrVersion())); }