Guide pratique pour interroger les métadonnées d’un assembly avec la réflexion (LINQ) (Visual Basic)
L’exemple suivant montre comment utiliser LINQ avec la réflexion pour récupérer des métadonnées spécifiques concernant des méthodes qui correspondent à un critère de recherche spécifié. Ici, la requête va rechercher les noms de toutes les méthodes dans 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 méthode Assembly.GetTypes pour retourner un tableau de types de 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 qui est retourné à partir de l’appel Type.GetMethods. Ces résultats sont filtrés pour retourner uniquement les méthodes dont le type de retour est un tableau ou un type qui implémente IEnumerable<T>. Pour finir, ces résultats sont regroupés en utilisant le nom de type comme clé.