7.8. An Advanced Member Search Mechanism
Problem
You are searching for a member within a
type using the Type class. However, complex member
searches are not available through the
GetMember and
GetMembers methods of a Type
object. The GetMember method searches for a member
name only within a type limited by the set of
BindingFlags used, and the
GetMembers method searches for all members limited
by the set of BindingFlags used.
BindingFlags is
an enumeration of various member types that can be searched. The
BindingFlags related to this recipe are defined
here:
- DeclaredOnly
Include inherited members in the search.
- Default
No binding flags are used.
- FlattenHierarchy
Include all static members in the inheritance hierarchy in the search (do not include static members of nested types in the search).
- IgnoreCase
Perform a case-insensitive search.
- Instance
Include instance members in the search.
- NonPublic
Include nonpublic members in the search.
- Public
Include public members in the search.
- Static
Include static members in the search.
You need to create more flexible and advanced searches for members that do not involve creating your own member search engine.
Solution
The FindMembers
method of a Type object can be used, along with a
callback, to create your own complex searches. The following method
will call our custom member searching method,
SearchMembers:
using System; using System.Reflection; public class SearchType { public void TestSearchMembers( ) { MemberInfo[] members = SearchMembers(this.GetType( ...