public static MemberAccessExpressionBuilderBase MemberAccess(Type elementType, Type memberType, string memberName) { memberType = memberType ?? typeof(object); if (elementType.IsCompatibleWith(typeof(DataRow))) { return new DataRowFieldAccessExpressionBuilder(memberType, memberName); } if (elementType.IsCompatibleWith(typeof(ICustomTypeDescriptor))) { return new CustomTypeDescriptorPropertyAccessExpressionBuilder(elementType, memberType, memberName); } if (elementType.IsCompatibleWith(typeof(XmlNode))) { return new XmlNodeChildElementAccessExpressionBuilder(memberName); } if (elementType == typeof(object) || elementType.IsCompatibleWith(typeof(System.Dynamic.IDynamicMetaObjectProvider))) { return new DynamicPropertyAccessExpressionBuilder(elementType, memberName); } return new PropertyAccessExpressionBuilder(elementType, memberName); }
private static MemberAccessExpressionBuilder MemberAccess(Type type, Type memberType, string memberName) { // memberType = memberType ?? typeof (object); if (type == typeof(object) || type.IsCompatibleWith(typeof(IDynamicMetaObjectProvider))) { return new DynamicPropertyAccessExpressionBuilder(type, memberName); } return new PropertyAccessExpressionBuilder(type, memberName); }
/// <exception cref="ArgumentException"><paramref name="elementType"/> did not implement <see cref="ICustomTypeDescriptor"/>.</exception> public CustomTypeDescriptorPropertyAccessExpressionBuilder(Type elementType, Type memberType, string memberName) : base(elementType, memberName) { if (!elementType.IsCompatibleWith(typeof(ICustomTypeDescriptor))) { throw new ArgumentException( string.Format(CultureInfo.CurrentCulture, "ElementType: {0} did not implement {1}", elementType, typeof(ICustomTypeDescriptor)), "elementType"); } this.propertyType = GetPropertyType(memberType); }