/// <summary> /// Determines the Type to use as a basis for generating a PropertyEditor for the specified member /// by evaluating the members current value and static Type. /// </summary> /// <param name="member"></param> /// <param name="values"></param> /// <returns></returns> protected Type ReflectTypeForMember(MemberInfo member, IEnumerable <object> values) { if (member is FieldInfo) { FieldInfo field = member as FieldInfo; if (values != null) { return(PropertyEditor.ReflectDynamicType(field.FieldType, values.Where(v => v != null).Select(v => field.GetValue(v)))); } else { return(field.FieldType); } } else if (member is PropertyInfo) { PropertyInfo property = member as PropertyInfo; if (values != null) { return(PropertyEditor.ReflectDynamicType(property.PropertyType, values.Where(v => v != null).Select(v => property.GetValue(v, null)))); } else { return(property.PropertyType); } } else { throw new ArgumentException("Only PropertyInfo and FieldInfo members are supported"); } }
/// <summary> /// Determines the Type to use as a basis for generating a PropertyEditor for the specified member /// by evaluating the members current value and static Type. /// </summary> /// <param name="member"></param> /// <param name="values"></param> /// <returns></returns> protected Type ReflectTypeForMember(MemberInfo member, IEnumerable <object> values) { if (member is FieldInfo) { FieldInfo field = member as FieldInfo; if (values != null) { return(PropertyEditor.ReflectDynamicType(field.FieldType, values.Where(v => v != null).Select(v => field.GetValue(v)))); } else { return(field.FieldType); } } else if (member is PropertyInfo) { PropertyInfo property = member as PropertyInfo; if (values != null) { List <object> propertyValues = new List <object>(); foreach (object obj in values) { if (obj == null) { continue; } try { object value = property.GetValue(obj, null); propertyValues.Add(value); } catch (TargetInvocationException) { } } return(PropertyEditor.ReflectDynamicType(property.PropertyType, propertyValues)); } else { return(property.PropertyType); } } else { throw new ArgumentException("Only PropertyInfo and FieldInfo members are supported"); } }