/// <summary> /// Initializes a new instance of the <see cref="InspectedProperty" /> class. /// </summary> /// <param name="type"> /// The inspected type. /// </param> /// <param name="fieldInfo"> /// The field info. /// </param> /// <exception cref="ArgumentNullException"> /// If <paramref name="type" /> is null. /// </exception> /// <exception cref="ArgumentNullException"> /// If <paramref name="fieldInfo" /> is null. /// </exception> /// <exception cref="ArgumentException"> /// If <paramref name="fieldInfo" /> 's declaring type has not been set. /// </exception> internal InspectedProperty(Type type, FieldInfo fieldInfo) { if (type == null) { throw new ArgumentNullException(nameof(type)); } if (fieldInfo == null) { throw new ArgumentNullException(nameof(fieldInfo)); } if (fieldInfo.DeclaringType == null) { throw new ArgumentException("fieldInfo declaring type has not been set", nameof(fieldInfo)); } this.Name = fieldInfo.SerializableName(); this.InspectedType = type; this.PropertyType = fieldInfo.FieldType; this.IsNotNullableValueType = this.PropertyType.IsNotNullableValueType(); if (fieldInfo.DeclaringType != fieldInfo.ReflectedType) { fieldInfo = fieldInfo.DeclaringType.GetField(fieldInfo.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } try { this.Getter = DelegateFactory.CreateGetter(fieldInfo); this.Setter = DelegateFactory.CreateSetter(fieldInfo); } catch (Exception exception) { Logging.TraceException(exception); } this.Member = fieldInfo; #if !HT4O_SERIALIZATION this.IdAttribute = fieldInfo.GetAttribute <IdAttribute>(); #endif this.IsTransient = fieldInfo.HasAttribute <TransientAttribute>() || fieldInfo.HasAttribute <NonSerializedAttribute>() || fieldInfo.HasAttribute <IgnoreDataMemberAttribute>(); this.Ignore = fieldInfo.HasAttribute <IgnoreAttribute>(); }
/// <summary> /// Create the count function for the type specified. /// </summary> /// <param name="type"> /// The type. /// </param> /// <returns> /// The newly created count function or null. /// </returns> private static Func <object, object> CreateCountMethod(Type type) { return(DelegateFactory.CreateGetter(type.GetProperty("Count", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))); }