Exemple #1
0
            //
            // Returns the cached result of a name-specific query on the Type's members, as if you'd passed in
            //
            //  BindingFlags == Public | NonPublic | Instance | Static | FlattenHierarchy
            //
            public QueriedMemberList <M> GetQueriedMembers <M>(string name, bool ignoreCase) where M : MemberInfo
            {
                int    index = MemberPolicies <M> .MemberTypeIndex;
                object obj   = ignoreCase ? _perNameQueryCaches_CaseInsensitive[index] : _perNameQueryCaches_CaseSensitive[index];

                Debug.Assert(obj is PerNameQueryCache <M>);
                PerNameQueryCache <M> unifier = Unsafe.As <PerNameQueryCache <M> >(obj);
                QueriedMemberList <M> result  = unifier.GetOrAdd(name);

                return(result);
            }
            //
            // Returns the cached result of a name-specific query on the Type's members, as if you'd passed in
            //
            //  BindingFlags == Public | NonPublic | Instance | Static | FlattenHierarchy  (immediateTypeOnly == false)
            //                  Public | NonPublic | Instance | Static | DeclaredOnly      (immediateTypeOnly == true)
            //
            public QueriedMemberList <M> GetQueriedMembers <M>(string name, bool ignoreCase, bool immediateTypeOnly) where M : MemberInfo
            {
                int index = MemberPolicies <M> .MemberTypeIndex;

                object[] cacheArray = ignoreCase ?
                                      (immediateTypeOnly ? _perNameQueryCaches_CaseInsensitive_ImmediateTypeOnly : _perNameQueryCaches_CaseInsensitive) :
                                      (immediateTypeOnly ? _perNameQueryCaches_CaseSensitive_ImmediateTypeOnly : _perNameQueryCaches_CaseSensitive);

                object unifierAsObject        = cacheArray[index];
                PerNameQueryCache <M> unifier = (PerNameQueryCache <M>)unifierAsObject;
                QueriedMemberList <M> result  = unifier.GetOrAdd(name);

                return(result);
            }