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.
Discussion
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access