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

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.