static Func <object, object?>[] ModifiableFieldGetters(Type type) { lock (getterCache) return(getterCache.GetOrCreate(type, () => { FieldInfo[] aux = Reflector.InstanceFieldsInOrder(type); return aux.Where(fi => Reflector.IsModifiableIdentifiableOrLite(fi.FieldType) && !IsIgnored(fi)) .Select(fi => ReflectionTools.CreateGetterUntyped(type, fi) !).ToArray(); }));
static TypeAttributePack?GetFieldsAndProperties(Type type) { lock (fieldAndProperties) { return(fieldAndProperties.GetOrCreate(type, () => { var list = Reflector.InstanceFieldsInOrder(type).Where(fi => fi.HasAttribute <T>() || (Reflector.TryFindPropertyInfo(fi)?.HasAttribute <T>() ?? false)).ToList(); if (list.Count == 0) { return null; } return new TypeAttributePack( fields: list.Select(fi => ReflectionTools.CreateGetterUntyped(type, fi) !).ToArray(), propertyNames: list.Select(fi => Reflector.FindPropertyInfo(fi).Name).ToArray() ); }));
public PropertyConverter(Type type, IPropertyValidator pv) { this.PropertyValidator = pv; GetValue = ReflectionTools.CreateGetterUntyped(type, pv.PropertyInfo); SetValue = ReflectionTools.CreateSetterUntyped(type, pv.PropertyInfo); }
//public Action<object, object> Setter { get; private set; } public EntityField(Type type, FieldInfo fi) { FieldInfo = fi; Getter = ReflectionTools.CreateGetterUntyped(type, fi); //Setter = ReflectionTools.CreateSetterUntyped(type, fi); }