Recipe 12.4 Finding Members in an Assembly

Recipe 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

The 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.

The * character may be used as a wildcard character only at the end of the name parameter string. In addition, it may be the only character in the name parameter; if this is so, all members are returned. No other wildcard characters, such as ? , are supported.


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.

Table 12-1. MemberTypes enumeration values

Enumeration value

Definition

All

All member types

Constructor

A constructor member

Custom

A custom member type

Event

An event member

Field

A field member

Method

A method member

NestedType

A nested type

Property

A property member

TypeInfo

A type member that represents a TypeInfo member

See Also

See Recipe 12.11; see the "Assembly Class," "BindingFlags Enumeration," and "MemberInfo Class" topics in the MSDN documentation.



C# Cookbook
C# 3.0 Cookbook
ISBN: 059651610X
EAN: 2147483647
Year: 2003
Pages: 315

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net