You need to find
one or more members in an assembly with a specific name or containing
part of a name. This partial name could be, for example, any member
starting with the letter 'A
' or the string
"Test
“.
Use
the Type.GetMember
method, which returns all
members that match a specified
criteria:
public static void FindMemberInAssembly(string asmPath, string memberName) { Assembly asm = Assembly.LoadFrom(asmPath); foreach(Type asmType in asm.GetTypes( )) { // check for static ones first MemberInfo[] members = asmType.GetMember(memberName, MemberTypes.All, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); if(members.Length == 0) { // check for instance members as well members = asmType.GetMember(memberName, MemberTypes.All, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); } foreach (MemberInfo member in members) { Console.WriteLine("Found " + member.MemberType + ": " + member.ToString( ) + " IN " + member.DeclaringType.FullName); } } }
The memberName
argument can contain the
wildcard character *
to indicate any character or
characters. So to find all methods starting with the string
“Test”, pass the string
"Test*
" to the
memberName
parameter. Note that the
memberName
argument is case-sensitive, but
the asmPath
argument is not. If
you’d like to do a case-insensitive search for
members, add the BindingFlags.IgnoreCase
flag to
the other BindingFlags
in the call to
Type.GetMember
.
The
GetMember
method of the
System.Type
class is useful for finding one or
more methods within a type. This method returns an array of
MemberInfo
objects that describe any members that
match the given parameters.
The *
character may
be used as a wildcard character only at the end of the
name
parameter string. In addition, it may
be the only character in the name
parameter; if this is so, all members are returned. No other wildcard
characters, such as ?
, are supported.
Once we obtain an array of MemberInfo
objects, we
need to determine what kind of members they are. To do this, the
MemberInfo
class contains a
MemberType
property that returns a
System.Reflection.MemberTypes
enumeration value.
This could be any of the values defined in Table 12-1.
See Recipe 12.11; see the “Assembly Class,” “BindingFlags Enumeration,” and “MemberInfo Class” topics in the MSDN documentation.