PdfRpt.Core.Helper.FastReflection.GetGetterDelegates C# (CSharp) Method

GetGetterDelegates() public method

Fast property access, using Reflection.Emit.
public GetGetterDelegates ( Type type ) : IList
type System.Type
return IList
        public IList<GetterInfo> GetGetterDelegates(Type type)
        {
            List<GetterInfo> cachedGetters;
            if (_gettersCache.TryGetValue(type, out cachedGetters))
                return cachedGetters;

            var gettersList = new List<GetterInfo>();
            var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (var property in properties)
            {
                var getterDelegate = createGetterPropertyDelegate(type, property);
                if (getterDelegate == null)
                    continue;

                var info = new GetterInfo
                {
                    Name = property.Name,
                    GetterFunc = getterDelegate,
                    PropertyType = property.PropertyType,
                    MemberInfo = property
                };
                gettersList.Add(info);
            }

            var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
            foreach (var field in fields)
            {
                var getterDelegate = createGetterFieldDelegate(type, field);
                if (getterDelegate == null)
                    continue;

                var info = new GetterInfo
                {
                    Name = field.Name,
                    GetterFunc = getterDelegate,
                    PropertyType = field.FieldType,
                    MemberInfo = field
                };
                gettersList.Add(info);
            }

            _gettersCache.Add(type, gettersList);
            return gettersList;
        }