[ Team LiB ] |
Recipe 12.4 Finding Members in an AssemblyProblemYou 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". 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 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. 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 we obtain an array of MemberInfo objects, we need to determine 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 could be any of the values defined in Table 12-1.
See AlsoSee Recipe 12.11; see the "Assembly Class," "BindingFlags Enumeration," and "MemberInfo Class" topics in the MSDN documentation. |
[ Team LiB ] |