Vorgehensweise: Abfragen der Metadaten einer Assembly mit Reflektion (LINQ) (C#)How to: Query An Assembly's Metadata with Reflection (LINQ) (C#)

Das folgende Beispiel zeigt, wie LINQ mit Reflektion verwendet werden kann, um bestimmte Metadaten über Methoden abzurufen, die einem angegebenen Suchkriterium entsprechen.The following example shows how LINQ can be used with reflection to retrieve specific metadata about methods that match a specified search criterion. In diesem Fall findet die Abfrage die Namen aller Methoden in der Assembly, die aufzählbare Typen zurückgeben wie z.B. Arrays.In this case, the query will find the names of all the methods in the assembly that return enumerable types such as arrays.

BeispielExample

using System.Reflection;  
using System.IO;  
namespace LINQReflection  
{  
    class ReflectionHowTO  
    {  
        static void Main(string[] args)  
        {  
            Assembly assembly = Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089");  
            var pubTypesQuery = from type in assembly.GetTypes()  
                        where type.IsPublic  
                            from method in type.GetMethods()  
                            where method.ReturnType.IsArray == true   
                                || ( method.ReturnType.GetInterface(  
                                    typeof(System.Collections.Generic.IEnumerable<>).FullName ) != null  
                                && method.ReturnType.FullName != "System.String" )  
                            group method.ToString() by type.ToString();  

            foreach (var groupOfMethods in pubTypesQuery)  
            {  
                Console.WriteLine("Type: {0}", groupOfMethods.Key);  
                foreach (var method in groupOfMethods)  
                {  
                    Console.WriteLine("  {0}", method);  
                }  
            }  

            Console.WriteLine("Press any key to exit");  
            Console.ReadKey();  
        }  
    }    
}  

Im Beispiel wird die GetTypes-Methode verwendet, um ein Array von Typen in der angegebenen Assembly zurückzugeben.The example uses the GetTypes method to return an array of types in the specified assembly. Der where-Filter wird angewendet, sodass nur öffentliche Typen zurückgegeben werden.The where filter is applied so that only public types are returned. Für jeden öffentlichen Typ wird mit dem MethodInfo-Array eine Unterabfrage generiert, die vom GetMethods-Aufruf zurückgegeben wird.For each public type, a subquery is generated by using the MethodInfo array that is returned from the GetMethods call. Diese Ergebnisse werden gefiltert, damit nur die Methoden zurückgegeben werden, deren Rückgabetyp ein Array oder ein Typ ist, der IEnumerable<T> implementiert.These results are filtered to return only those methods whose return type is an array or else a type that implements IEnumerable<T>. Abschließend werden die Ergebnisse mithilfe des Typnamens als Schlüssel gruppiert.Finally, these results are grouped by using the type name as a key.

Kompilieren des CodesCompiling the Code

Erstellen Sie ein Projekt, das die .NET Framework-Version 3.5 oder höher verwendet, mit einem Verweis auf System.Core.dll und using-Direktiven für System.Linq- und System.IO-Namespaces.Create a project that targets the .NET Framework version 3.5 or higher with a reference to System.Core.dll and using directives for the System.Linq and System.IO namespaces.

Siehe auchSee Also

LINQ to Objects (C#)LINQ to Objects (C#)