Recipe 13.4. Finding Members in an AssemblyProblemYou need to find one or more members of types 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." SolutionUse 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 type in asm.GetTypes( )) { // Check for static ones first. MemberInfo[] members = type.GetMember(memberName, MemberTypes.All, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | 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. DiscussionThe GetMember method of the System.Type class is useful for finding one or more methods within a type. This method returns an array of MemberInfo objects that describe any members that match the given parameters.
Once you obtain an array of MemberInfo objects, you need to examine what kind of members they are. To do this, the MemberInfo class contains a MemberType property that returns a System.Reflection.MemberTypes enumeration value. This can be any of the values defined in Table 13-1, except for the All value.
See AlsoSee Recipe 13.10; see the "Assembly Class," "BindingFlags Enumeration," and "MemberInfo Class" topics in the MSDN documentation. |