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.