12.4. Finding Members in an Assembly
Problem
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“.
Solution
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.