Reusable helper methods when implementing IFieldHarvester
コード例 #1
0
        /// <summary>
        /// We ignore all properties as they, in the end, will only point to some computed state or other fields.
        /// Hence they do not provide information about the actual state of the object.
        /// </summary>
        public List <SanitizedFieldInfo> GetFields(Type type)
        {
            // we need all fields in order to get the private backing field of public properties
            var fields = new HarvestHelper().GetFields(type);
            var res    =
                fields.Where(
                    x =>
                    ((FieldInfo)x.FieldInfo).IsPublic ||
                    x.FieldInfo.Name.EndsWith(HarvestHelper.BackingFieldSuffix, StringComparison.Ordinal));

            return(res.ToList());
        }
コード例 #2
0
        /// <summary>
        /// We ignore all properties as they, in the end, will only point to some computed state or other fields.
        /// Hence they do not provide information about the actual state of the object.
        /// </summary>
        public List<SanitizedFieldInfo> GetFields(Type type)
        {
            // we need all fields in order to get the private backing field of public properties
            var fields = new HarvestHelper().GetFields(type);
            var res =
                fields.Where(
                    x =>
                    ((FieldInfo)x.FieldInfo).IsPublic
                    || x.FieldInfo.Name.EndsWith(HarvestHelper.BackingFieldSuffix));

            return res.ToList();
        }
コード例 #3
0
        void ExcludeByTypeImplementation <TTarget>(params Type[] types)
        {
            PreConditionToAdd <TTarget>(Strategy.Excluder);
            var helper = new HarvestHelper();

            // we evaluate outside of the usage in the lambda to prevent multiple calls to GetFieldsAndProperties()
            var cachedList = new List <string>();

            foreach (var type in types)
            {
                cachedList.AddRange(helper.GetFieldsAndProperties(type).Select(x => x.SanitizedName));
            }
            excluders.Add(new Implementation(typeof(TTarget), x => x.Where(y => !cachedList.Contains(y.SanitizedName))));
        }
コード例 #4
0
        void IncludeByTypeImplementation <TTarget>(params Type[] types)
        {
            PreConditionToAdd <TTarget>(Strategy.Includer);
            var helper = new HarvestHelper();

            // we evaluate outside of the usage in the lambda to prevent multiple calls to GetFieldsAndProperties()
            var cachedList = new List <SanitizedFieldInfo>();

            foreach (var type in types)
            {
                cachedList.AddRange(helper.GetFieldsAndProperties(type));
            }
            includers.Add(new Implementation(typeof(TTarget), x => cachedList));
        }
コード例 #5
0
        /// <summary>
        /// Harvest only public fields and properties.
        /// </summary>
        public List <SanitizedFieldInfo> GetFields(Type type)
        {
            var fields = new HarvestHelper().GetFieldsAndProperties(type);

            return(fields.Where(IsPublic).ToList());
        }
コード例 #6
0
        /// <summary>
        /// Harvest only public fields and properties.
        /// </summary>
        public List<SanitizedFieldInfo> GetFields(Type type)
        {
            var fields = new HarvestHelper().GetFieldsAndProperties(type);

            return fields.Where(IsPublic).ToList();
        }