O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required