Partager via


Comment interroger les métadonnées d'un assembly avec réflexion (LINQ) (Visual Basic)

L’exemple suivant montre comment LINQ peut être utilisé avec la réflexion pour récupérer des métadonnées spécifiques sur les méthodes qui correspondent à un critère de recherche spécifié. Dans ce cas, la requête recherche les noms de toutes les méthodes de l’assembly qui retournent des types énumérables tels que des tableaux.

Exemple :

Imports System.Linq
Imports System.Reflection  

Module Module1  
    Sub Main()  
        Dim asmbly As Assembly =
            Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken= b77a5c561934e089")  
  
        Dim pubTypesQuery = From type In asmbly.GetTypes()
                            Where type.IsPublic
                            From method In type.GetMethods()
                            Where method.ReturnType.IsArray = True
                            Let name = method.ToString()
                            Let typeName = type.ToString()
                            Group name By typeName Into methodNames = Group  
  
        Console.WriteLine("Getting ready to iterate")  
        For Each item In pubTypesQuery  
            Console.WriteLine(item.methodNames)  
  
            For Each type In item.methodNames  
                Console.WriteLine(" " & type)  
            Next  
        Next  
        Console.WriteLine("Press any key to exit... ")  
        Console.ReadKey()  
    End Sub  
End Module  

L’exemple utilise la Assembly.GetTypes méthode pour retourner un tableau de types dans l’assembly spécifié. Le filtre Clause Where est appliqué afin que seuls les types publics soient retournés. Pour chaque type public, une sous-requête est générée en utilisant le tableau MethodInfo retourné par l'appel de Type.GetMethods. Ces résultats sont filtrés pour renvoyer uniquement les méthodes dont le type de retour est un tableau ou un autre type qui implémente IEnumerable<T>. Enfin, ces résultats sont regroupés à l’aide du nom de type en tant que clé.

Voir aussi