Ejemplo n.º 1
0
        /// <summary>
        /// Returns all fields/properties/methods on the type that pass the given filter.
        /// </summary>
        /// <param name="filter">The filter to use. You may be interested in some predefined
        /// filters available in the InspectedMemberFilters type.</param>
        public List <InspectedMember> GetMembers(IInspectedMemberFilter filter)
        {
            VerifyNotCollection();

            List <InspectedMember> members;

            if (_cachedMembers.TryGetValue(filter, out members) == false)
            {
                // Not in the cache. Run each item through the filter and then cache the result.
                members = new List <InspectedMember>();
                for (int i = 0; i < _allMembers.Count; ++i)
                {
                    var member = _allMembers[i];

                    bool allow;
                    if (member.IsProperty)
                    {
                        allow = filter.IsInterested(member.Property);
                    }
                    else
                    {
                        allow = filter.IsInterested(member.Method);
                    }

                    if (allow)
                    {
                        members.Add(member);
                    }
                }

                _cachedMembers[filter] = members;
            }

            return(members);
        }